Reconstruir un objeto desde un stream requier primero que el objeto se haya escrito en un stream. Por eso empezaremos por aqu�:
��C�mo Escribir en un ObjectOutputStream?
Escribir objetos a un stream es un proceso sencillo. Por ejemplo, aqu� obtenemos la hora actual en milisegundos construyendo un objeto Date y luego serializamos ese objeto.
FileOutputStream out = new FileOutputStream("theTime"); ObjectOutputStream s = new ObjectOutputStream(out); s.writeObject("Today"); s.writeObject(new Date()); s.flush();
ObjectOutputStream es un stream de proceso, por eso debe construirse sobre otro stream. Este c�digo construye un ObjectOutputStream sobre un FileOutputStream, para serializar el objeto a un fichero llamado theTime.
Luego, el string Today y un objeto Date se escriben en el stream con el m�todo writeObject de ObjectOutputStream.
Si un objeto se refiere a otro objeto, entonces todos los objetos que son alcanzables desde el primero deben ser escritos al mismo tiempo para poder mantener la relaci�n entre ellos. As�, el m�todo writeObject serializa el objeto especificado, sigue sus referencias a otros objetos recursivamente, y tambi�n los escribe todos.
El stream ObjectOutputStream implementa el interface DataOutput que define muchos m�todos para escribir tipos de datos primitivos, como writeInt, writeFloat, o writeUTF. Podemos usar estos m�todos para escribir tipos de datos primitivos a un ObjectOutputStream.
El m�todo writeObject lanza una NotSerializableException si el objeto dado no es serializable. Un objeto es serializable s�lo si clase implementa el interface Serializable.
��C�mo Leer desde un ObjectInputStream?
Una vez que hemos escrito objetos y tipos de datos primitivos en un stream, querremos leerlos de nuevo y reconstruir los objetos. Esto tambi�n es sencillo. Aqu� est� el c�digo que lee el String y el objeto Date que se escribieron en el fichero llamado theTime del �ltimo ejemplo.
FileInputStream in = new FileInputStream("theTime"); ObjectInputStream s = new ObjectInputStream(in); String today = (String)s.readObject(); Date date = (Date)s.readObject();
C�mo ObjectOutputStream, ObjectInputStream debe construirse sobre otro stream. En este ejemplo, los objetos fueros archivados en un fichero, por eso el c�digo construye un ObjectInputStream sobre un FileInputStream. Luego, el c�digo usa el m�todo readObject de ObjectInputStream para leer el String y el objeto Date desde el fichero. Los objetos deben ser le�dos desde el stream en el mismo orden en que se esribieron. Observa que el valor de retorno de readObject es un objeto que es forzado y asignado a un tipo espec�fico.
El m�todo readObject des-serializa el siguiente objeto en el stream y revisa sus referencias a otros objetos recursivamente para des-serializar todos los objetos que son alcanzables desde �l. De esta forma, mantiene la relaci�n entre los objetos.
El stream ObjectInputStream implementa el interface DataInput que define m�todos para leer tipos de datos primitivos. Los m�todos de DataInput son paralelos a los definidos en DataOutput para escribir tipos de datos primitivos. Entre ellos se incluyen readInt, readFloat, y readUTF. Se usan estos m�todos para leer tipos de datos primitivos desde un ObjectInputStream.