I/O: Leer y Escibir

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.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR

SIGUIENTE ARTÍCULO