2011-01-17 10 views
0
で使用したObjectOutputStreamとのFileOutputStream

はこのようObjectOutputStreamを使用する方法はありますてFileWriter

FileOutputStream fos = new FileOutputStream(filename); 
ObjectOutputStream oos = new ObjectOutputStream(fos); 
FileWriter fw = new FileWriter(fos); 

例えば:

fw.write("<tag>"); 
oos.write(cool_object); 
fw.wrote("</tag>"); 

Iドンその結果は得られません。 ObjectOutputStreamは、毎回ファイルを完全に上書きしているようです。

答えて

1

のXMLバージョンであるXMLEncoderを使用することができます。

oos.writeObject("<tag>"); 
oos.writeObject(cool_object); 
oos.writeObject("</tag>"); 

またはテキスト出力

fw.write("<tag>"+cool_object+"</tag>"); 

EDIT:あなたはそれが含まれている場合cool_object.toString()およびHTMLの特殊文字の出力をエンコードする必要があるかもしれません。

+0

'cool_object'に ''や他のXMLエンティティのような文字列が含まれていると、いくつかの問題が発生することがあります。 @Bozhoのように、XML-Frameworkを使うか、バイナリをBase64-Stringに変換する方が良いかもしれません。 –

+0

あなたは 'oos.writeObject(..)'を意味すると思いますか?これは3つのオブジェクト、すなわち2つの文字列と1つのカスタムを出力します。しかし、シリアル化後の文字列オブジェクトの表現は ' ' – Bozho

+0

@Bozhoではないでしょう、あなたは正しいです。バイナリファイルには、 ''と ''と、テキストとして読み込めないバイナリがたくさんあります。 –

4

ません - FileWriterテキストを書き込むためですが、ObjectOutputStreamの出力は、本質的にバイナリデータです。オブジェクトをXMLにシリアル化する場合は、がXMLについてを知っているシリアライザを使用します。 XStream

1

ObjectOutputStreamは、2進表現を作成します。だから、最初の文字列表現にそれを有効にする必要があります - 六角またはBase64のいずれか

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ObjectOutputStream oos = new ObjectOutputStream(baos); 
String str = Base64.encodeBase64(baos.toByteArray()); 

はその後、タグの間に、このstrを書きます。

あなたではなくバイナリ表現よりも、XML表現をしたい場合は、次のバイナリ出力を試してみてくださいObjectOutputStream

関連する問題