Классы ObjectInputStream и ObjectOutputStream являются подклассами классов InputStream и OutputStream соответственно. Объекты, созданные классами ObjectInputStream и ObjectOutputStream, называются потоками ввода объектов и потоками вывода объектов . Поток вывода объекта использует метод writeObject(Object obj) для записи объекта obj в файл, а поток ввода объекта использует readObject() для чтения объекта в программу.
Методы построения классов ObjectInputStream и ObjectOutputStream следующие:
Указатель ObjectOutputStream должен быть объектом выходного потока, поэтому при подготовке к записи объекта в файл сначала создайте выходной поток, используя подкласс OutputStream.
Например, используйте FileOutputStream для создания потока вывода файла, код выглядит следующим образом:
FileOutputStreamfileOut = newFileOutputStream (tom.txt); ObjectOutputStreamobjectout = newObjectOutputStream (fileOut);
Аналогично, указатель ObjectInputStream должен быть объектом входного потока, поэтому при подготовке к чтению объекта из файла в программу сначала создайте входной поток, используя подкласс InputStream.
Например, используйте FileInputStream для создания потока ввода файла, код выглядит следующим образом:
FileInputStreamfileIn = newFileInputStream (tom.txt); ObjectInputStreamobjectIn = newObjectInputStream (fileIn);
При использовании объектных потоков для записи или чтения объектов убедитесь, что объекты сериализованы. Это необходимо для того, чтобы объекты можно было записать в файл и правильно прочитать обратно в программу.
Если класс реализует интерфейс Serializable (интерфейс в пакете java.io), то объект, созданный этим классом, является так называемым сериализованным объектом. Большинство объектов, предоставляемых библиотеками классов Java, являются так называемыми сериализованными. Следует подчеркнуть, что в интерфейсе Serializable нет методов, поэтому классам, реализующим этот интерфейс, не нужно реализовывать дополнительные методы. Еще следует отметить, что при использовании объектных потоков для записи объекта в файл необходимо сериализовать не только объект, но и объекты-члены объекта.
Методы интерфейса Serializable невидимы для программы, поэтому классам, реализующим этот интерфейс, не требуется реализовывать дополнительные методы. Когда сериализованный объект записывается в поток вывода объекта, JVM реализует методы интерфейса Serializable Write. текст в определенном формате (информация о сериализации объекта) в пункт назначения. Когда поток объектов ObjectInputStream считывает объект из файла, информация о сериализации объекта считывается обратно из файла, и объект создается на основе информации о сериализации объекта.
Например, используйте потоки объектов для чтения и записи объектов, созданных классом 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=newFileOutputStream (файл);ObjectOutputStreamobjectOut=newObjectOutputStream(fileOut);objectOut.writeObject(changhong);objectOut.close();FileInputStreamfileIn=newFileInputStream(file);ObjectInputStreamobjectIn=newObjectInputStream(fileIn);TVxinfei=(TV)objectIn.readObject();objectIn .close();xinfei.setName(Xinfei TV);xinfei.setPrice(6666);System.out.println(имя changhong:+changhong.getName());System.out.println(цена changhong:+ changhong.getPrice ());System.out.println(имя xinfei:+xinfei.getName());System.out.println(цена xinfei:+xinfei.getPrice());}catch(ClassNotFoundExceptionevent){System .out.println( невозможно прочитать объект);}catch(IOExceptionevent){System.out.println(event);}}}