Добрый вечер.
Как обычно принято джаве сериализовать int в байтовое ascii-представление?
Т.е., например, из 123 получить byte[]{0x31, 0x32, 0x33}?
Integer.toString(123).getBytes() ?
Но тут выделяется целых два вспомогательных буфера.
Есть ли способ быстрее (например, сохранять в уже готовй буфер)? И пользуются ли им, или считается, что это экономия на спичках?
Здравствуйте, GarryIV, Вы писали:
F2>>>Как обычно принято джаве сериализовать int в байтовое ascii-представление?
C0s>>см. java.nio.ByteBuffer
GIV>Как он тут поможет?
Здравствуйте, f95.2, Вы писали:
F2>Как обычно принято джаве сериализовать int в байтовое ascii-представление? F2>Т.е., например, из 123 получить byte[]{0x31, 0x32, 0x33}?
F2>Integer.toString(123).getBytes() ? F2>Но тут выделяется целых два вспомогательных буфера.
Нормальный для обычного кода вариант. Но кодировку лучше указать.
F2>Есть ли способ быстрее (например, сохранять в уже готовй буфер)? И пользуются ли им, или считается, что это экономия на спичках?
Без промежуточного преобразования в String только руками делить. В каком-нибудь сериализаторе реализовано наверняка.
Здравствуйте, vsb, Вы писали:
F2>>>>Как обычно принято джаве сериализовать int в байтовое ascii-представление?
C0s>>>см. java.nio.ByteBuffer
GIV>>Как он тут поможет?
vsb>ByteBuffer.putInt(int value)
Напомню, ТС хочет чтоб получилось byte[]{0x31, 0x32, 0x33}
Здравствуйте, GarryIV, Вы писали:
GIV>Напомню, ТС хочет чтоб получилось byte[]{0x31, 0x32, 0x33}
А, сорри, необычное желание. Я бы посоветовал тогда просто сделать Writer над этими байтами в нужной кодировке и писать туда текст, раз по сути там текст, а не двоичные данные.
Здравствуйте, f95.2, Вы писали:
F2>Как обычно принято джаве сериализовать int в байтовое ascii-представление? F2>Т.е., например, из 123 получить byte[]{0x31, 0x32, 0x33}?
Предположу, что base64.encoder + wrap outputstream
UPD: или надо обязательно в десятичное представление?
Здравствуйте, GarryIV, Вы писали:
F2>>>Как обычно принято джаве сериализовать int в байтовое ascii-представление?
C0s>>см. java.nio.ByteBuffer
GIV>Как он тут поможет?
я смотрел не на фактический пример в вопросе, а на соседний вопрос ТС в разделе про сериализацию.
Здравствуйте, f95.2, Вы писали:
F2>Добрый вечер. F2>Как обычно принято джаве сериализовать int в байтовое ascii-представление? F2>Т.е., например, из 123 получить byte[]{0x31, 0x32, 0x33}?
F2>Integer.toString(123).getBytes() ? F2>Но тут выделяется целых два вспомогательных буфера. F2>Есть ли способ быстрее (например, сохранять в уже готовй буфер)? И пользуются ли им, или считается, что это экономия на спичках?
Экономия на спичках. Есть StringBuilder.append(int), если нужно быстрее, то либо не используют ascii представление, либо пишут сериализацию руками, это уровень школьной программы.
edit: О, это тот же автор, что и в соседнем топике. Тогда рекомендую DataOutputStrream, удобный примитив для сериализации всего.
Здравствуйте, f95.2, Вы писали:
F2>Как обычно принято джаве сериализовать int в байтовое ascii-представление? F2>Т.е., например, из 123 получить byte[]{0x31, 0x32, 0x33}? F2>Integer.toString(123).getBytes() ?
Все правильно, только лучше так:
F2>Но тут выделяется целых два вспомогательных буфера. F2>Есть ли способ быстрее (например, сохранять в уже готовй буфер)?
Встроенного — нет, но можно быстро сделать самому — большая часть кода есть в jdk: java.lang.Integer#stringSize & java.lang.Integer#getChars
F2>И пользуются ли им, или считается, что это экономия на спичках?
И да и нет. Те, кто процессят меньше 100К событий в секунду на поток и не ворочают терабайтами, скажут, что спички. В общем, что спички, а что нет — тебе надо самому решать.