2011-11-23 16 views
5

Supongamos que tengo un OutputStream (y no unObjectOutputStream). ¿Es posible enviar un objeto serializado usando el método de escritura? ¡Gracias!Serializar objeto con outputtream

+0

puede escribir cualquier dato con un OutputStream. lo más simple es hacer un byte [] de su objeto – Hachi

Respuesta

18

aquí es lo que haces para serializar el objeto

new ObjectOutputStream(outputStream).writeObject(obj); 

si desea controlar el byte [] de salida

ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 

ObjectOutputStream oos = new ObjectOutputStream(buffer); 

oos.writeObject(obj); 

oos.close(); 

byte[] rawData = buffer.toByteArray(); 

ps. thx para los comentarios a continuación, editado como corresponde

+0

También debe agregar texto descriptivo para que no sea solo una respuesta correcta sino también _good_. –

+1

Necesita 'writeObject()', no 'write()'. Y una llamada a 'flush()' sería útil. –

0

Debe tener que utilizar la clase ObjectOutputStream y sus métodos para objetos *serialize*. De hecho, ObjectOutputStream es una subclase de java.io.OutputStream (es una superclase abstracta de flujos orientados a bytes). Echar un vistazo a un artículo sobre Java Serialization API.

EDIT: Puede utilizar XMLEncoder

(desde el Doc: La clase XMLEncoder es una alternativa complementaria a la ObjectOutputStream y puede utilizar para generar una representación textual de un JavaBean de la misma manera que el ObjectOutputStream se puede utilizar para crear representación binaria de objetos serializables)

+1

hay más de una forma de serializar un Objeto; no tiene que usar ObjectOutputStream – Hachi

1

Puede usar ObjectOutputStream para "capturar" los datos de los objetos en una matriz de bytes y enviarlos al 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); 
} 

Otra opción no genérica sería serializar el objeto en una representación de cadena, por ej. CSV

0

Esto es trivial: sólo tiene que envolver el original OutputStream en una nueva ObjectOutputStream, y luego usar los métodos especializados de ObjectOutputStream:

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

Internamente, ObjectOutputStream llamará a los OutputStream subyacentes 's write() método.

Cuestiones relacionadas