Преобразование любого объекта в массив байтов в java
У меня есть объект типа X, который я хочу преобразовать в массив байтов, прежде чем отправлять его для хранения в S3. Может ли кто-нибудь сказать мне, как это сделать? Я ценю вашу помощь.
- Сериализация JSON массива с полиморфными объектами
- Json.net сериализует определенное частное поле
- JSON.NET Parser * кажется * будет двойной сериализацией моих объектов
- Json Сериализация Java, которая работает с GWT
- «Тип не ожидается», используя DataContractSerializer - но это просто class, не смешные вещи?
- Использование jQuery для захвата содержимого из iframe CKEditor
- C # десериализация структуры после ее получения через TCP
- Как сериализовать словарь как часть его родительского объекта с помощью Json.Net
То, что вы хотите сделать, называется « сериализация ». Есть несколько способов сделать это, но если вам не нужно что-то фантастическое, я думаю, что использование стандартной сериализации объектов 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
.
Полное преобразование из массива объектов в байты, описанное в этом руководстве, является учебным пособием.
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?