2011-11-23 4 views
5

Предположим, у меня есть OutputStream (, а неObjectOutputStream). Можно ли отправить сериализованный объект с помощью метода записи? Благодаря!Сериализуйте объект с выходным потоком

+0

вы можете записывать любые данные с помощью OutputStream. проще всего сделать байт [] вашего объекта. – Hachi

ответ

18

вот что вы делаете для сериализации объекта

new ObjectOutputStream(outputStream).writeObject(obj); 

, если вы хотите, чтобы контролировать этот байт [] Выходной

ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 

ObjectOutputStream oos = new ObjectOutputStream(buffer); 

oos.writeObject(obj); 

oos.close(); 

byte[] rawData = buffer.toByteArray(); 

пс. thx для комментариев ниже, отредактировано соответственно

+0

Вы также должны добавить некоторый описательный текст, чтобы это был не только правильный ответ, но и _good_ one. –

+1

Вам нужно 'writeObject()', а не 'write()'. И вызов 'flush()' был бы полезен. –

0

Вам необходимо использовать класс ObjectOutputStream и его методы для *serialize* объектов. Фактически ObjectOutputStream является подклассом java.io.OutputStream (Это абстрактный суперкласс байт-ориентированных потоков). Посмотрите на статью о Java Serialization API.

EDIT: Вы можете использовать XMLEncoder

(от Doc: Класс XMLEncoder является дополнительной альтернативой ObjectOutputStream и могут использоваться для создания представления текстового из JavaBean таким же образом, что ObjectOutputStream может быть использован для создания двоичного представления Serializable объектов)

+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 будет вызывать write() метод основные OutputStream «ы.