2011-11-23 10 views
5

Supponiamo di avere un OutputStream (e non unoObjectOutputStream). È possibile inviare un oggetto serializzato usando il metodo di scrittura? Grazie!Serializzare l'oggetto con outputstream

+0

è possibile scrivere qualsiasi dato con un OutputStream. il più semplice è creare un byte [] dell'oggetto – Hachi

risposta

18

qui è quello che si fa per serializzare l'oggetto

new ObjectOutputStream(outputStream).writeObject(obj); 

se si desidera controllare il byte [] uscita

ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 

ObjectOutputStream oos = new ObjectOutputStream(buffer); 

oos.writeObject(obj); 

oos.close(); 

byte[] rawData = buffer.toByteArray(); 

ps. grazie per i commenti qui sotto, modificato come conseguenza

+0

Dovresti aggiungere anche del testo descrittivo in modo che non sia solo una risposta corretta ma anche una buona. –

+1

È necessario 'writeObject()', non 'write()'. E una chiamata a 'flush()' sarebbe utile. –

0

È necessario utilizzare la classe ObjectOutputStream e i relativi metodi su oggetti *serialize*. Infatti ObjectOutputStream è una sottoclasse di java.io.OutputStream (è una super classe astratta di flussi orientati ai byte). Date un'occhiata a un articolo su Java Serialization API.

EDIT: È possibile utilizzare XMLEncoder

(dal doc: La classe XMLEncoder è un complementare alternativa al l'ObjectOutputStream e può essere usato per generare una rappresentazione testuale di un JavaBean nello stesso modo in cui l'ObjectOutputStream può essere usato per creare rappresentazione binaria di oggetti Serializable)

+1

c'è più di un modo per serializzare un oggetto; non devi usare ObjectOutputStream – Hachi

1

È possibile utilizzare ObjectOutputStream per "acquisire" i dati degli oggetti in una matrice di byte e inviarli a 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); 
} 

Un'altra opzione non generica sarebbe quella di serializzare l'oggetto in una rappresentazione di stringa, ad es. CSV

0

Questo è banale: si può semplicemente avvolgere il vostro originale OutputStream in una nuova ObjectOutputStream, e quindi utilizzare i metodi specializzati di ObjectOutputStream:

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

Internamente, ObjectOutputStream chiamerà il metodo delle OutputStream sottostanti l' write().

Problemi correlati