2013-10-11 1 views
3

많은 비 직렬화 API는 스트림을 가져 와서 스트림의 끝까지 읽게되고 스트림의 끝에 도달하기 전에 직렬화 된 개체의 끝을 지나면 오류가 발생합니다. 내 스트림에서 여러 객체를 차례로 직렬화합니다. 그런 다음 나중에 그 스트림에서 그들을 deserialize하고 싶습니다. 각 객체의 길이를 알 수 있으며 이러한 매개 변수를 사용하면 스트림을 읽는 데 얼마나 걸릴지 말할 수는 있지만 그렇게하지는 않습니다.더 긴 스트림을 기반으로 고정 길이의 스트림 만들기

길이가있는 스트림을 생성자의 첫 번째 인수로 사용하는 "하위 스트림"을 만든 다음 하위 스트림이 끝에 있다고 주장하는 문제를 해결할 수 있다고 생각합니다. 디시리얼라이저가 종료되고 부모 스트림이 올바르게 배치되어 다음 객체를 비 직렬화 할 수 있습니다.

제 질문은 BCL에 이미이를 지원하는 클래스가 있습니까? 아니면 누구나 그러한 맞춤 스트림의 예가 있습니까?

힌트 : I am 여기서 스트림은 의도적으로 메모리 버퍼가 아니라 이야기합니다. 스트림에서 x 바이트를 읽고 기본 스트림에 MemoryStream을 넣을 수는 있지만 스트림 전체가 한 번에 메모리에 저장된다고 가정 할 수는 없습니다.

답변

2

아니요 BCL에는 해당 클래스가 없습니다.

동기 읽기 작업 만 필요한 경우 쓰기가 매우 간단합니다. 올바른 경계 검사를 사용하여 내부 스트림으로 리디렉션하는 Read을 구현하면 Stream에서 파생됩니다. 코드에서 CanSeek/Length 속성을 사용하고 ReadByte을 구현해야하는 경우가 있습니다.

관련 문제