2011-01-17 3 views
0

Есть ли способ использовать ObjectOutputStream как это:Использование ObjectOutputStream и FileOutputStream с FileWriter

<tag>output of the ObjectOutputStream</tag> 

Если я пытаюсь:

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>"); 

Я не Получи этот результат. Кажется, что ObjectOutputStream перезаписывает файл каждый раз.

ответ

1

попробовать следующий двоичный выход.

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

ИЛИ выводимый текст

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

EDIT: Вы, возможно, потребуется для кодирования выходного сигнала cool_object.toString(), если оно содержит и HTML специальные символы.

+0

Может возникнуть несколько проблем, если ваш 'cool_object' содержит String как '' или другие XML-объекты. Это может быть лучше, если вы используете XML-Framework или конвертируете свой двоичный код в Base64-String, как упоминал @Bozho. –

+0

следует ли предположить, что вы имели в виду 'oos.writeObject (..)'? Это будет выводить 3 объекта - 2 строки и 1 пользовательский. Но представление строкового объекта после сериализации вряд ли будет «' – Bozho

+0

@Bozho, вы правы. Бинарный файл будет содержать '' и' ', а также много бинарных файлов, которые вы не сможете прочитать в виде текста. –

4

Нет - это FileWriter для написания текста , но выход ObjectOutputStream является по своей сути двоичные данные. Если вы хотите сериализовать объекты в XML, используйте сериализатор, который знает о XML, например. XStream.

1

ObjectOutputStream делает двоичное представление. Таким образом, вы должны сначала превратить это в строковое представление - либо шестигранной или Base64

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

затем записать этот str между тегами.

Если вы хотите представление XML, а не двоичное представления, то вы можете использовать XMLEncoder который является версией XML из ObjectOutputStream

Смежные вопросы