使用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
将调用底层的OutputStream
的write()
方法。
您必须使用ObjectOutputStream类及其方法来*serialize*
对象。 事实上, ObjectOutputStream
是java.io.OutputStream
的子类(它是面向字节的流的抽象超类)。 看看有关Java Serialization API的文章。
编辑:您可以使用XMLEncoder
(来自Doc:XMLEncoder类是ObjectOutputStream的补充替代,可用于生成JavaBean的文本表示,其方式与ObjectOutputStream可用于创建Serializable对象的二进制表示的方式相同)