2011-11-23 58 views
5

假设我有一个OutputStream而不是ObjectOutputStream)。是否可以使用写入方法发送序列化的对象?谢谢!带输出流的序列化对象

+0

您可以使用OutputStream编写任何数据。最简单的方法是制作对象的字节[] – Hachi

回答

18

这里是你做的序列化对象

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为下面的评论,编辑为相应的

+0

您应该添加一些描述性文字,以便它不仅仅是一个正确的答案,而且也是一个好的答案。 –

+1

您需要'writeObject()',而不是'write()'。调用flush()会很有用。 –

0

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

编辑: 您可以使用XMLEncoder

(从文件:XMLEncoder类是 互补替代用ObjectOutputStream,可以用来生成一个文本 表示JavaBean的方式与 ObjectOutputStream可用于创建 可序列化对象的相同方式)

+1

有多种方法来序列化对象;你不必使用ObjectOutputStream – Hachi

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

0

这很简单:你可以简单地包裹你原来OutputStream在新ObjectOutputStream,然后使用ObjectOutputStream了专门的方法:

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

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