Сериализация в byte[]
От: f95.2  
Дата: 06.05.20 19:09
Оценка:
Добрый вечер.

Я хочу сериализовать объекты определенного типа в byte[] (или список из byte[]), чтобы послать их по сети.
Причем, перед отправкой самого объекта надо отправить длину его байтового представления.

Чтобы посчитать эту длину как раз и приходится писать всё в один массив, а не отправлять данные по кусочкам
(точнее, можно было бы пройтись по объекту и посчитать его длину, но это неудобно).

И что-то я не могу найти хороший способ сериализовтаь объект.
Варианты, которые я нашел:
1. ByteArrayOutputStream. Держит в себе массив,который при необходимости реаллоцирует.
Проблемы:
а) при реаллокации содержимое старого массива копируется в новый. Кажется, лучше подошла бы структура, которая хранила бы список из нескольких масивов.
б) Чтобы получить byte[], надо вызвать метод toByteArray(), который создает новый массив и копирует туда содержимое ByteArrayOutputStream.
А мне массив по факту нужен только для чтения, поэтому в этом копировании смысла нет.

2. ArrayList<Byte>
Проблемы:
а) Ходят слухи, что работа с обертками значительно медленнее работы с примитивами.
б) напрямую его по сети не послать, нужно всё равно формировать byte[], да еще и заполнять его поэлементно, а не через arraycopy.


Что в подобных случаях используют джависты?
Или может я зря загоняюсь, и на этот оверхед вообще нет смысла обращать внимания?
Но ведь на джаве вроде как пишут и хайлоад в том числе, должен же быть функционал, который позволит делать работу без лишнего оверхеда.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.