딥 클론: ObjectInputStream, ObjectOutputStream 및 ByteArrayOutputStream

1871 단어 원본 코드cache
다음 깊이 복제된 원본 코드는 잘 이해하지 못하니 조사하여 기록하시오
		 bout = new ByteArrayOutputStream();      // 
		 ObjectOutputStream oos = null;           // 
		 ObjectInputStream ois = null;
		 
		 oos = new ObjectOutputStream(bout);
	         oos.writeObject(oldValue);               // , 
	         ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
		 ois = new ObjectInputStream(bin);        // , 
		 newValue = (Serializable) ois.readObject();
Byte Array Output Stream 클래스는 출력 흐름을 실현했고 그 중의 데이터는byte 그룹에 기록되었다.버퍼는 데이터를 계속 쓰기 때문에 자동으로 증가합니다.toByteArray () 와 toString () 을 사용하여 데이터를 얻을 수 있으며, 출력 흐름에 저장된 유효한 데이터의 현재 크기입니다.예를 들면 다음과 같습니다.
	    int a = 0,b = 1,c = 2;
	    ByteArrayOutputStream bout = new ByteArrayOutputStream(); 
	    bout.write(a); 
	    bout.write(b); 
	    bout.write(c); 
	    byte[] buff = bout.toByteArray(); 
	    for (int i = 0; i < buff.length; i++) 
	        System.out.println(buff[i]);
출력 결과: 0, 1, 2.
자바와 같은 대상을 대상으로 하는 언어는 프로그래밍을 할 때 데이터가 대부분 대상에 저장된다. 때로는 메모리에 있는 모든 대상을 파일에 쓰고 적당한 시기에 파일의 대상을 메모리로 복원해야 한다. 위 코드에 나타난 ObjectInputStream과 ObjectOutputStream 두 종류로 이 작업을 완성할 수 있다.
서열화는 대상의 상태 정보를 저장하거나 전송할 수 있는 형식으로 바꾸는 과정을 말한다.서열화 기간에 대상은 현재 상태를 임시 또는 지속적인 저장소에 기록합니다.나중에 저장소에서 객체의 상태를 읽거나 반서열화하여 객체를 다시 작성할 수 있습니다.서열화가 필요한 대상은 반드시 Serializable 인터페이스를 실현해야 한다.Serializable 인터페이스는 추상적인 방법이 없습니다. 이 인터페이스를 실현하는 것은 컴파일러에게 이 대상이 서열화될 것임을 알리기 위해서입니다.대상의transient와static 형식 구성원 변수는 읽거나 쓰지 않습니다.ObjectInputStream은 원래 데이터와 ObjectOutputStream을 사용하기 전에 쓴 대상을 반서열화하고, ObjectInputStream은 이전에 서열화된 대상을 복원하는 데 사용됩니다.
상기 코드는 ByteArray OutputStream을 통해 메모리에 있는 캐시 데이터를 가져와 그룹으로 전환한다.ByteArrayInputStream은 바이트 배열을 입력 흐름으로 바꿉니다.
실제 데이터 흐름: Object OutputStream->ByteArray OutputStream->ByteArray InputStream->Object InputStream, 깊이 있는 복제는 서열화 대상에서 서열화 대상으로 전환

좋은 웹페이지 즐겨찾기