Преобразование любого объекта в массив байтов в java

У меня есть объект типа X, который я хочу преобразовать в массив байтов, прежде чем отправлять его для хранения в S3. Может ли кто-нибудь сказать мне, как это сделать? Я ценю вашу помощь.

То, что вы хотите сделать, называется « сериализация ». Есть несколько способов сделать это, но если вам не нужно что-то фантастическое, я думаю, что использование стандартной сериализации объектов Java будет очень хорошо.

Возможно, вы могли бы использовать что-то вроде этого?

package com.example; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class Serializer { public static byte[] serialize(Object obj) throws IOException { try(ByteArrayOutputStream b = new ByteArrayOutputStream()){ try(ObjectOutputStream o = new ObjectOutputStream(b)){ o.writeObject(obj); } return b.toByteArray(); } } public static Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException { try(ByteArrayInputStream b = new ByteArrayInputStream(bytes)){ try(ObjectInputStream o = new ObjectInputStream(b)){ return o.readObject(); } } } } 

Есть несколько улучшений, которые можно сделать. Не в последнюю очередь факт, что вы можете читать или записывать только один объект на каждый массив байтов, который может быть или не быть тем, что вы хотите.

Обратите внимание: «Только те объекты, которые поддерживают интерфейс java.io.Serializable могут быть записаны в streamи» (см. java.io.ObjectOutputStream ).

Поскольку вы можете столкнуться с этим, непрерывное распределение и изменение размера java.io.ByteArrayOutputStream может оказаться довольно шеей бутылки. В зависимости от вашей модели streamовой передачи вы можете рассмотреть возможность повторного использования некоторых объектов.

Для сериализации объектов, которые не реализуют интерфейс Serializable вам нужно либо написать собственный сериализатор, например, используя методы read * / write * для java.io.DataOutputStream и методы get * / put * для java.nio.ByteBuffer возможно, вместе с размышлением или тянуть зависимость третьей стороны.

На этом сайте есть список и сравнение производительности некоторых рамок сериализации. Глядя на API, кажется, что Крио может соответствовать тому, что вам нужно.

Используйте методы serialize и deserialize в SerializationUtils из commons-lang .

Да. Просто используйте двоичную сериализацию . Вы должны использовать каждый объект для использования implements Serializable но это прямолинейно.

Другой вариант, если вы хотите избежать реализации интерфейса Serializable, заключается в использовании отражения и чтения и записи данных в буфер из буфера, используя следующий процесс:

 /** * Sets all int fields in an object to 0. * * @param obj The object to operate on. * * @throws RuntimeException If there is a reflection problem. */ public static void initPublicIntFields(final Object obj) { try { Field[] fields = obj.getClass().getFields(); for (int idx = 0; idx < fields.length; idx++) { if (fields[idx].getType() == int.class) { fields[idx].setInt(obj, 0); } } } catch (final IllegalAccessException ex) { throw new RuntimeException(ex); } } 

Источник .

Как я уже упоминал в других похожих вопросах, вы можете рассмотреть возможность сжатия данных, поскольку стандартная java-сериализация немного сложна. вы делаете это, помещая GZIPInput / OutputStream между streamами объектов и streamами байтов.

Чтобы преобразовать объект в массив байтов, используйте концепцию Serialization and De-serialization .

Полное преобразование из массива объектов в байты, описанное в этом руководстве, является учебным пособием.

http://javapapers.com/core-java/java-serialization/

 Q. How can we convert object into byte array? Q. How can we serialize a object? Q. How can we De-serialize a object? Q. What is the need of serialization and de-serialization? 
  • ТипNameHandling предостережение в Newtonsoft Json
  • Сохранение / загрузка данных в Unity
  • Может ли Json.NET сериализовать / десериализовать в / из streamа?
  • Deserialize JSON в динамический объект C #?
  • Как десериализовать JSON с двойными именами свойств в одном и том же объекте
  • Сериализовать статический class?
  • Сериализация classа, который содержит std :: string
  • Как реализовать TypeAdapterFactory в Gson?
  • Почему java.util.Optional не является Serializable, как сериализовать объект с такими полями
  • Как сериализовать объект в CSV-файл?
  • Получение ServiceStack для сохранения информации о типе
  • Interesting Posts

    Как отменить определенное слово в регулярном выражении?

    Как отключить видеоролики YouTube от автоматического воспроизведения?

    Удалите все пользовательские папки, кроме одного при перезагрузке

    Не удалось загрузить файл или сборку «Microsoft.ReportViewer.Common, Version = 11.0.0.0

    Попытка прозрачным методом безопасности ‘WebMatrix.WebData.PreApplicationStartCode.Start ()’

    __attribute __ ((конструктор)) эквивалентен в VC?

    Как правильно обращаться с gzipped-страницей при использовании завитка?

    в то время как (1) Vs. for (;;) Есть ли разница в скорости?

    Шаблон ASP.NET MVC ViewModel

    Является результатом printf (“% d% d”, c ++, c); также не определено?

    getline не просит ввода?

    Совет. Пожалуйста, перейдите на Windows 7, даже если поставщик ноутбуков не предоставляет драйверы?

    Может ли кто-нибудь объяснить настройки и настройки параметров устройства Wi-Fi в Windows 7?

    Outlook 2013 + Gmail приводит к появлению многих сообщений в черновиках даже после их отправки

    Запрос, основанный на нескольких предложениях в Firebase

    Давайте будем гением компьютера.