在Java中将任何对象转换为字节数组

我有一个typesX的对象,我想要转换成字节数组之前发送它存储在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的连续分配和resize可能会成为瓶颈。 根据您的线程模型,您可能需要考虑重用一些对象。

对于没有实现Serializable接口的对象的Serializable您需要编写自己的序列化程序,例如使用java.io.DataOutputStream的read * / write *方法和java.nio.ByteBuffer的get * / put *方法也许与反思一起,或者拉第三方的依赖。

这个网站有一些序列化框架的列表和性能比较。 看看APIs似乎Kryo可能适合你需要的东西。

在commons-lang的 SerializationUtils使用serializedeserialize方法。

正如我在其他类似的问题中提到的,您可能需要考虑压缩数据,因为默认的Java序列化有点冗长。 你可以通过在Objectstream和Bytestream之间放置一个GZIPInput / OutputStream来实现。

是啊。 只要使用二进制序列化 。 你必须让每个对象都使用implements Serializable但是从那里直接就可以了。

如果你想避免实现Serializable接口,你的另一个select是使用reflection,并使用下面的过程从缓冲区读写数据:

 /** * 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); } } 

来源 。

要将对象转换为字节数组,请使用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?