Java可序列化对象到字节数组

假设我有一个可序列化的类AppMessage

我想将它作为byte[]通过套接字传输到另一台机器,从接收的字节中重build它。

我怎么能做到这一点?

准备发送的字节:

 ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutput out = null; try { out = new ObjectOutputStream(bos); out.writeObject(yourObject); out.flush(); byte[] yourBytes = bos.toByteArray(); ... } finally { try { bos.close(); } catch (IOException ex) { // ignore close exception } } 

从字节创build对象:

 ByteArrayInputStream bis = new ByteArrayInputStream(yourBytes); ObjectInput in = null; try { in = new ObjectInputStream(bis); Object o = in.readObject(); ... } finally { try { if (in != null) { in.close(); } } catch (IOException ex) { // ignore close exception } } 

最好的方法是使用Apache Commons Lang的 SerializationUtils

序列化:

 byte[] data = SerializationUtils.serialize(yourObject); 

反序列化:

 YourObject yourObject = SerializationUtils.deserialize(data) 

如前所述,这需要Commons Lang库。 它可以使用Gradle导入:

 compile 'org.apache.commons:commons-lang3:3.5' 

Maven的:

 <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.5</version> </dependency> 

Jar文件

在这里提到更多的方法

或者,整个集合可以导入。 参考这个链接

如果使用Java> = 7,则可以使用资源尝试来改进可接受的解决scheme:

 private byte[] convertToBytes(Object object) throws IOException { try (ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutput out = new ObjectOutputStream(bos)) { out.writeObject(object); return bos.toByteArray(); } } 

反过来说:

 private Object convertFromBytes(byte[] bytes) throws IOException, ClassNotFoundException { try (ByteArrayInputStream bis = new ByteArrayInputStream(bytes); ObjectInput in = new ObjectInputStream(bis)) { return in.readObject(); } } 

可以通过SerializationUtils完成,通过由ApacheUtils的serialize&deserialize方法将对象转换为byte [],反之亦然,如@uris回答中所述。

通过序列化将对象转换为byte []:

 byte[] data = SerializationUtils.serialize(object); 

通过反序列化将byte []转换为对象

 Object object = (Object) SerializationUtils.deserialize(byte[] data) 

点击链接下载org-apache-commons-lang.jar

通过单击来集成.jar文件:

文件名 – > 打开Medule设置 – > select你的模块 – > 依赖项 – > 添加jar文件 ,你就完成了。

希望这有助于