우리는 클래스의 두 객체가 동일한 참조를 갖는 경우 다음과 같이 동일한 엔터티와 기능을 갖는다는 것을 이미 알고 있습니다.
Aone=newA();Atwo=one;
클래스 A에 x라는 int 멤버 변수가 있다고 가정합니다. 그러면 다음 작업을 수행합니다.
2.x=100;
그러면 one.x의 값도 100이 됩니다.
또 다른 예를 들어, 특정 메소드의 매개변수는 People 유형입니다.
publicvoidf(Peoplep){px=200;}
이 메소드를 호출할 때 zhang과 같은 People 객체에 대한 참조가 매개변수 P에 전달되면 메소드가 실행된 후 zhang.x의 값도 200이 됩니다.
때로는 개체의 "사본"을 얻고 싶을 때가 있습니다. 복사본 엔터티를 변경해도 원본 개체 엔터티는 변경되지 않으며 그 반대의 경우도 마찬가지입니다. 이러한 복사본을 원본 객체의 복제 객체 또는 간단히 복제본 이라고 합니다.
객체 스트림을 사용하여 직렬화된 객체의 복제본을 얻는 것은 쉽습니다. 객체 출력 스트림이 가리키는 대상에 객체를 쓴 다음 해당 대상을 객체 입력 스트림의 소스로 사용하고 소스에서 읽습니다. 반환된 객체는 원본 객체의 복제본이어야 합니다. 즉, 객체 입력 스트림은 객체의 직렬화 정보를 통해 현재 객체의 복제본을 얻습니다. 예를 들어, 이전 섹션의 예에서 xinfei 개체는 changhong 개체의 복제본입니다.
프로그램이 개체의 복제본을 더 빨리 얻으려는 경우 개체 스트림을 사용하여 개체의 직렬화 정보를 디스크의 파일에 쓰는 대신 메모리에 쓸 수 있습니다. 객체 스트림은 배열 스트림을 기본 스트림으로 사용하여 객체의 직렬화 정보를 메모리에 씁니다. 예를 들어 이전 섹션의 예를 들 수 있습니다.
FileOutputStreamfileOut=newFileOutputStream(파일);ObjectOutputStreamobjectOut=newObjectOutputStream(fileOut);
그리고
FileInputStreamfileIn=newFileInputStream(파일);ObjectInputStreamobjectIn=newObjectInputStream(fileIn);
다음으로 변경:
ByteArrayOutputStreamoutByte=newByteArrayOutputStream();ObjectOutputStreamobjectOut=newObjectOutputStream(outByte);
그리고
ByteArrayInputStreaminByte=newByteArrayInputStream(outByte.toByteArray());ObjectInputStreamobjectIn=newObjectInputStream(inByte);
java.awt 패키지의 구성요소 클래스는 직렬화 가능 인터페이스를 구현하는 클래스입니다. 따라서 프로그램은 구성요소를 출력 스트림에 쓴 다음 입력 스트림을 사용하여 해당 구성요소의 복제본을 읽을 수 있습니다. 요소.