2010-05-20 11 views
8

Quiero crear en ObjectOutputStream, pero no quiero persistir el objeto en un archivo, entonces, ¿cómo hacerlo? Todos los tutoriales (que he encontrado) dicen que sólo por la forma de archivos:crear flujo de salida de objeto desde un objeto

 FileOutputStream fos = new FileOutputStream("t.tmp"); 
     ObjectOutputStream oos = new ObjectOutputStream(fos); 
     oos.writeObject(new Date()); 
     oos.close(); 

que desea almacenar el objeto en una base de datos, por lo que necesitan para especificar una corriente en el método de la clase setBinaryStream()PreparedStatement.

gracias por responder ...

Respuesta

7

En su lugar, guárdelo en una matriz de bytes. Puede usar ByteArrayOutputStream para esto. De esta manera puede usar PreparedStatement#setBytes().

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ObjectOutputStream oos = new ObjectOutputStream(baos); 
oos.writeObject(new Date()); 
oos.close(); 
// ... 
preparedStatement.setBytes(i, baos.toByteArray()); 

Dicho esto, esto es bastante un buen olor. ¿Estás seguro de que necesitas serializar objetos Java en una base de datos? De esta manera son indescifrables e inescrutables. Si, por ejemplo, almacena cada Person serializado en la base de datos, ya no puede hacer SELECT * FROM person WHERE name = 'John'. La práctica normal es hacer un mapeo 1: 1 de la entidad y la tabla DB. El Date, por ejemplo, se puede almacenar perfectamente en una columna DATETIME/TIMESTAMP.

+0

Definitivamente sé que esto no es una buena práctica, que en mi opinión no es justificación para no saber esta forma de programación :-) – coubeatczech

+0

De acuerdo, supongamos que sabes lo que estás haciendo :) De nada. – BalusC

5
ByteArrayOutputStream bos = new ByteArrayOutputStream(); 

ObjectOutputStream os = new ObjectOutputStream(bos); 
os.writeObject(new Date()); 
os.close(); 

byte[] data = bos.toByteArray(); 

Así que ya tienen una matriz de bytes y hacer lo que quiera con él.

0

específicamente necesita utilizar un outputtream para escribir en una base de datos? Consideraría seriamente mirar la API de persistencia antes de intentar escribir una implementación de outputtream ... dado que los detalles de la conexión, etc., pueden ser difíciles de gestionar.

eche un vistazo a link text y recuerde que también se puede usar en J2SE.

Cuestiones relacionadas