Les classes ObjectInputStream et ObjectOutputStream sont respectivement des sous-classes des classes InputStream et OutputStream. Les objets créés par les classes ObjectInputStream et ObjectOutputStream sont appelés flux d'entrée d'objet et flux de sortie d'objet . Le flux de sortie d'objet utilise la méthode writeObject(Object obj) pour écrire un objet obj dans un fichier, et le flux d'entrée d'objet utilise readObject() pour lire un objet dans le programme.
Les méthodes de construction des classes ObjectInputStream et ObjectOutputStream sont les suivantes :
Le pointeur d'ObjectOutputStream doit être un objet de flux de sortie. Par conséquent, lorsque vous vous préparez à écrire un objet dans un fichier, créez d'abord un flux de sortie à l'aide d'une sous-classe de OutputStream.
Par exemple, utilisez FileOutputStream pour créer un flux de sortie de fichier, le code est le suivant :
FileOutputStreamfileOut=newFileOutputStream(tom.txt);ObjectOutputStreamobjectout=newObjectOutputStream(fileOut);
De même, le pointeur d'ObjectInputStream doit être un objet de flux d'entrée. Ainsi, lorsque vous vous préparez à lire un objet d'un fichier dans le programme, créez d'abord un flux d'entrée à l'aide d'une sous-classe d'InputStream.
Par exemple, utilisez FileInputStream pour créer un flux d'entrée de fichier, le code est le suivant :
FileInputStreamfileIn=newFileInputStream(tom.txt);ObjectInputStreamobjectIn=newObjectInputStream(fileIn);
Lorsque vous utilisez des flux d'objets pour écrire ou lire des objets, assurez-vous que les objets sont sérialisés. Cela permet de garantir que les objets peuvent être écrits dans le fichier et que les objets peuvent être relus correctement dans le programme.
Si une classe implémente l'interface Serialisable (l'interface du package java.io), alors l'objet créé par cette classe est ce qu'on appelle l'objet sérialisé. La plupart des objets fournis par les bibliothèques de classes Java sont dits sérialisés. Il convient de souligner qu'il n'y a pas de méthodes dans l'interface Serialisable, donc les classes qui implémentent cette interface n'ont pas besoin d'implémenter de méthodes supplémentaires. Une autre chose à noter est que lorsque vous utilisez des flux d'objets pour écrire un objet dans un fichier, non seulement l'objet doit être sérialisé, mais les objets membres de l'objet doivent également être sérialisés.
Les méthodes de l'interface Serialisable sont invisibles pour le programme, donc les classes qui implémentent cette interface n'ont pas besoin d'implémenter de méthodes supplémentaires lorsqu'un objet sérialisé est écrit dans le flux de sortie de l'objet, la JVM implémentera les méthodes dans l'interface Serialisable. texte dans un certain format (informations de sérialisation de l'objet) vers la destination. Lorsque le flux d'objets ObjectInputStream lit un objet à partir d'un fichier, les informations de sérialisation de l'objet sont lues à partir du fichier et un objet est créé sur la base des informations de sérialisation de l'objet.
Par exemple, utilisez des flux d'objets pour lire et écrire des objets créés par la classe TV :
TV.java
importjava.io.*;publicclassTVimplementsSerialised{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(nom de changhong :+changhong. getName ());System.out.println(prix de changhong:+changhong.getPrice()); System.out.println(nom de xinfei :+xinfei.getName());System.out.println(prix de xinfei :+xinfei.getPrice());}catch(ClassNotFoundExceptionevent){System.out.println(impossible de lire l'objet );}catch(IOExceptionevent){System.out.println(event);}}}