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);
객체 스트림을 사용하여 객체를 쓰거나 읽을 때 객체가 직렬화되었는지 확인하십시오. 이는 객체를 파일에 쓸 수 있고 객체를 프로그램에서 올바르게 다시 읽을 수 있도록 하기 위한 것입니다.
클래스가 직렬화 가능 인터페이스 (java.io 패키지의 인터페이스)를 구현하는 경우 이 클래스에 의해 생성된 객체는 소위 직렬화된 객체입니다. Java 클래스 라이브러리가 제공하는 대부분의 객체는 소위 직렬화되어 있습니다. 직렬화 가능 인터페이스에는 메소드가 없으므로 이 인터페이스를 구현하는 클래스는 추가 메소드를 구현할 필요가 없다는 점을 강조해야 합니다. 주목해야 할 또 다른 사항은 객체 스트림을 사용하여 객체를 파일에 쓸 때 객체가 직렬화되어야 할 뿐만 아니라 객체의 구성원 객체도 직렬화되어야 한다는 것입니다.
직렬화 가능 인터페이스의 메소드는 프로그램에 표시되지 않으므로 이 인터페이스를 구현하는 클래스는 추가 메소드를 구현할 필요가 없습니다. 직렬화된 객체가 객체 출력 스트림에 기록되면 JVM은 직렬화 가능 인터페이스의 메소드를 구현합니다. 특정 형식의 텍스트(객체의 직렬화 정보)를 대상으로 전송합니다. ObjectInputStream 개체 스트림이 파일에서 개체를 읽을 때 개체의 직렬화 정보를 파일에서 다시 읽고 개체의 직렬화 정보를 기반으로 개체가 생성됩니다.
예를 들어, 객체 스트림을 사용하여 TV 클래스에서 생성된 객체를 읽고 씁니다.
TV.java
importjava.io.*;publicclassTVimplementsSerialized{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(파일);ObjectInputStreamobjectIn=newObjectInputStream(fileIn);TVxinfei=(TV)objectIn.readObject();objectIn .close();xinfei.setName(Xinfei TV);xinfei.setPrice(6666);System.out.println(창홍 이름:+changhong.getName());System.out.println(창홍 가격:+ 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);}}}