Die Klassen ObjectInputStream und ObjectOutputStream sind Unterklassen der Klassen InputStream bzw. OutputStream. Die von den Klassen ObjectInputStream und ObjectOutputStream erstellten Objekte werden als Objekteingabestreams und Objektausgabestreams bezeichnet. Der Objektausgabestream verwendet die Methode writeObject(Object obj), um ein Objekt obj in eine Datei zu schreiben, und der Objekteingabestream verwendet readObject(), um ein Objekt in das Programm einzulesen.
Die Konstruktionsmethoden der Klassen ObjectInputStream und ObjectOutputStream lauten wie folgt:
Der Zeiger von ObjectOutputStream sollte ein Ausgabestream-Objekt sein. Wenn Sie also das Schreiben eines Objekts in eine Datei vorbereiten, erstellen Sie zunächst einen Ausgabestream mithilfe einer Unterklasse von OutputStream.
Verwenden Sie beispielsweise FileOutputStream, um einen Dateiausgabestream zu erstellen. Der Code lautet wie folgt:
FileOutputStreamfileOut=newFileOutputStream(tom.txt);ObjectOutputStreamobjectout=newObjectOutputStream(fileOut);
Ebenso sollte der Zeiger von ObjectInputStream ein Eingabestream-Objekt sein. Wenn Sie also das Einlesen eines Objekts aus einer Datei in das Programm vorbereiten, erstellen Sie zunächst einen Eingabestream mithilfe einer Unterklasse von InputStream.
Verwenden Sie beispielsweise FileInputStream, um einen Dateieingabestream zu erstellen. Der Code lautet wie folgt:
FileInputStreamfileIn=newFileInputStream(tom.txt);ObjectInputStreamobjectIn=newObjectInputStream(fileIn);
Wenn Sie Objektströme zum Schreiben oder Lesen von Objekten verwenden, stellen Sie sicher, dass die Objekte serialisiert sind. Dadurch wird sichergestellt, dass die Objekte in die Datei geschrieben und die Objekte korrekt in das Programm zurückgelesen werden können.
Wenn eine Klasse die Serializable-Schnittstelle (die Schnittstelle im java.io-Paket) implementiert, dann ist das von dieser Klasse erstellte Objekt das sogenannte serialisierte Objekt. Die meisten von Java-Klassenbibliotheken bereitgestellten Objekte sind sogenannte serialisierte Objekte. Es sollte betont werden, dass die Serializable-Schnittstelle keine Methoden enthält, sodass Klassen, die diese Schnittstelle implementieren, keine zusätzlichen Methoden implementieren müssen. Beachten Sie außerdem, dass bei der Verwendung von Objektströmen zum Schreiben eines Objekts in eine Datei nicht nur das Objekt, sondern auch die Mitgliedsobjekte des Objekts serialisiert werden müssen.
Die Methoden in der Serializable-Schnittstelle sind für das Programm unsichtbar, sodass Klassen, die diese Schnittstelle implementieren, keine zusätzlichen Methoden implementieren müssen. Wenn ein serialisiertes Objekt in den Objektausgabestream geschrieben wird, implementiert die JVM die Methoden in der Serializable-Schnittstelle Text in einem bestimmten Format (Serialisierungsinformationen des Objekts) an das Ziel. Wenn der ObjectInputStream-Objektstream ein Objekt aus einer Datei liest, werden die Serialisierungsinformationen des Objekts aus der Datei zurückgelesen und ein Objekt basierend auf den Serialisierungsinformationen des Objekts erstellt.
Verwenden Sie beispielsweise Objektströme, um von der TV-Klasse erstellte Objekte zu lesen und zu schreiben:
TV.java
importjava.io.*;publicclassTVimplementsSerializable{Stringname;intprice;publicvoidsetName(Strings){name=s;}publicvoidsetPrice(intn){price=n;}publicStringgetName(){returnname;}publicintgetPrice(){returnprice;}}
Main.java
importjava.io.*;publicclassMain{publicstaticvoidmain(Stringargs[]){TVchanghong=newTV();changhong.setName(Changhong TV);changhong.setPrice(5678);Filefile=newFile(television.txt);try{FileOutputStreamfileOut=newFileOutputStr eam(file);ObjectOutputStreamobjectOut=newObjectOutputStream(fileOut);objectOut.writeObject(changhong);objectOut.close();FileInputStreamfileIn=newFileInputStream(file);ObjectInputStreamobjectIn=newObjectInputStream (fileIn);TVxinfei=(TV)objectIn.readObject();objectIn.close();xinfei.setName(新飞TV);xinfei.setPrice(6666);System.out.println(changhong’s name:+changhong. getName ());System.out.println(changhong's price:+changhong.getPrice()); System.out.println(xinfei's name:+xinfei.getName());System.out.println(xinfei's price:+xinfei.getPrice());}catch(ClassNotFoundExceptionevent){System.out.println(Objekt kann nicht ausgelesen werden );}catch(IOExceptionevent){System.out.println(event);}}}