2011-11-23 44 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()方法。