Las clases ObjectInputStream y ObjectOutputStream son subclases de las clases InputStream y OutputStream respectivamente. Los objetos creados por las clases ObjectInputStream y ObjectOutputStream se denominan flujos de entrada de objetos y flujos de salida de objetos . El flujo de salida del objeto usa el método writeObject(Object obj) para escribir un objeto obj en un archivo, y el flujo de entrada del objeto usa readObject() para leer un objeto en el programa.
Los métodos de construcción de las clases ObjectInputStream y ObjectOutputStream son los siguientes:
El puntero de ObjectOutputStream debe ser un objeto de flujo de salida, por lo que cuando se prepare para escribir un objeto en un archivo, primero cree un flujo de salida utilizando una subclase de OutputStream.
Por ejemplo, use FileOutputStream para crear un flujo de salida de archivo, el código es el siguiente:
FileOutputStreamfileOut=newFileOutputStream(tom.txt);ObjectOutputStreamobjectout=newObjectOutputStream(fileOut);
De manera similar, el puntero de ObjectInputStream debe ser un objeto de flujo de entrada, por lo que cuando se prepare para leer un objeto de un archivo en el programa, primero cree un flujo de entrada usando una subclase de InputStream.
Por ejemplo, use FileInputStream para crear un flujo de entrada de archivo, el código es el siguiente:
FileInputStreamfileIn=newFileInputStream(tom.txt);ObjectInputStreamobjectIn=newObjectInputStream(fileIn);
Cuando utilice secuencias de objetos para escribir o leer objetos, asegúrese de que los objetos estén serializados. Esto es para garantizar que los objetos se puedan escribir en el archivo y que se puedan volver a leer en el programa correctamente.
Si una clase implementa la interfaz serializable (la interfaz en el paquete java.io), entonces el objeto creado por esta clase es el llamado objeto serializado. La mayoría de los objetos proporcionados por las bibliotecas de clases Java se denominan serializados. Cabe enfatizar que no hay métodos en la interfaz serializable, por lo que las clases que implementan esta interfaz no necesitan implementar métodos adicionales. Otra cosa a tener en cuenta es que cuando se utilizan secuencias de objetos para escribir un objeto en un archivo, no solo se debe serializar el objeto, sino que también se deben serializar los objetos miembros del objeto.
Los métodos en la interfaz Serializable son invisibles para el programa, por lo que las clases que implementan esta interfaz no necesitan implementar métodos adicionales. Cuando un objeto serializado se escribe en el flujo de salida del objeto, la JVM implementará los métodos en la interfaz Serializable Write. texto en un formato determinado (información de serialización del objeto) al destino. Cuando la secuencia de objetos ObjectInputStream lee un objeto de un archivo, la información de serialización del objeto se vuelve a leer del archivo y se crea un objeto en función de la información de serialización del objeto.
Por ejemplo, utilice secuencias de objetos para leer y escribir objetos creados por la clase de TV:
tv.java
importjava.io.*;publicclassTVimplementsSerializable{Stringname;intprice;publicvoidsetName(Strings){name=s;}publicvoidsetPrice(intn){price=n;}publicStringgetName(){returnname;}publicintgetPrice(){returnprice;}}
principal.java
importjava.io.*;publicclassMain{publicstaticvoidmain(Stringargs[]){TVchanghong=newTV();changhong.setName(Changhong TV);changhong.setPrice(5678);Filefile=newFile(television.txt);try{FileOutputStreamfileOut=newFileOutputStream (archivo);ObjectOutputStreamobjectOut=newObjectOutputStream(fileOut);objectOut.writeObject(changhong);objectOut.close();FileInputStreamfileIn=newFileInputStream(archivo);ObjectInputStreamobjectIn=newObjectInputStream(fileIn);TVxinfei=(TV)objectIn.readObject();objectIn .close();xinfei.setName(Xinfei TV);xinfei.setPrice(6666);System.out.println(nombre de changhong:+changhong.getName());System.out.println(precio de changhong:+ changhong.getPrice ());System.out.println(nombre de xinfei:+xinfei.getName());System.out.println(precio de xinfei:+xinfei.getPrice());}catch(ClassNotFoundExceptionevent){System .out.println( no se puede leer el objeto);}catch(IOExceptionevent){System.out.println(event);}}}