使用outputstream序列化对象

时间:2011-11-23 10:35:02

标签: java serialization

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

4 个答案:

答案 0 :(得分:19)

这是序列化对象的方法

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用于以下评论,相应编辑

答案 1 :(得分:1)

您可以使用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 );
}

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

答案 2 :(得分:1)

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

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

在内部,ObjectOutputStream会调用基础OutputStream的{​​{1}}方法。

答案 3 :(得分:0)

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

的文章

编辑: 您可以使用XMLEncoder

  

(来自Doc:XMLEncoder类是一个补充替代   ObjectOutputStream可用于生成文本   表示JavaBean的方式与   ObjectOutputStream可用于创建二进制表示   可序列化的对象)