使用outputstream序列化对象

假设我有一个OutputStream而不是 ObjectOutputStream )。 是否可以使用write方法发送序列化对象? 谢谢!

这是你序列化对象的方法

 new ObjectOutputStream(outputStream).writeObject(obj); 

如果你想控制byte []输出

 ByteArrayOutputStream buffer = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(buffer); oos.writeObject(obj); oos.close(); byte[] rawData = buffer.toByteArray(); 

PS。 thx用于以下评论,相应编辑

您可以使用ObjectOutputStream来“捕获”字节数组中的对象数据,并将其发送到OutputStream。

 String s = "test"; ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream( baos ); oos.writeObject( s ); byte[] byteArray = baos.toByteArray(); for ( byte b : byteArray ) { System.out.print( (char) b ); } 

另一个非通用选项是以字符串表示forms序列化对象,例如CSV

这很简单:您只需将原始OutputStream包装在新的ObjectOutputStream ,然后使用ObjectOutputStream的专用方法:

 OutputStream myOriginalOutputStream = ...; ObjectOutputStream oos = new ObjectOutputStream(myOriginalOutputStream); oos.writeObject(new MyObject()); oos.flush(); oos.close(); 

在内部, ObjectOutputStream将调用底层的OutputStreamwrite()方法。

您必须使用ObjectOutputStream类及其方法来*serialize*对象。 事实上, ObjectOutputStreamjava.io.OutputStream的子类(它是面向字节的流的抽象超类)。 看看有关Java Serialization API的文章。

编辑:您可以使用XMLEncoder

(来自Doc:XMLEncoder类是ObjectOutputStream的补充替代,可用于生成JavaBean的文本表示,其方式与ObjectOutputStream可用于创建Serializable对象的二进制表示的方式相同)