2014-09-18 3 views
1

스트림의 위치 pos에 정수 배열을 쓰고 있습니다. 기본적으로 int[]이 있고 Serializer.SerializeWithLengthPrefix(stream, array, typeof(int[]), PrefixStyle.Fixed32, -1);을 사용합니다. 이것에 의해, 올바른 접두사의 길이의 배열이 스트림에 추가됩니다.protobuf-net 직렬화 된 배열의 k 번째 요소를 비 직렬화

임의의 인덱스에서 스트림의 요소를 deserialize하려고합니다. 한 가지 방법은 pos + (index*fixedLength)에 의해 스트림을 검색하는 것이지만이 배열의 정수는 DataFormat.Default을 사용하여 작성되며 varient 길이 인코딩이 생성됩니다.

변경할 방법이 있습니까?

이 작업을 수행하는 한 가지 방법은 배열을 일부 래퍼 클래스의 속성으로 캡슐화하는 것입니다. 그런 다음 속성에 DataFormat.FixedSize을 지정할 수 있습니다. 이러한 시나리오에 가장 적합한 방법입니까?

fixedLength도 무엇이겠습니까? sizeof(int)? 당신이 원하는 모든 파일에 고정 된 크기의 정수 (또는 다른 스트림) 인 경우

감사합니다, 이 울리 솔직히

답변

0

는, 프로토콜 버퍼를 사용하여 전혀 효과가 없다; 잊어 버리십시오. - 정수를 4 바이트 덩어리로 작성하고 (리틀 엔디안이 가장 편리 할 것 같습니다) 파일 (/ stream)에서 직접 액세스하십시오. 프로토콜 버퍼는 구조의 데이터로 작업하기 쉽지만 모든 작업에이 버퍼를 사용해야하는 것은 아닙니다. 이 경우 원시 오프셋을 사용하는 것이 절대적인 의미를 갖습니다.

+0

예 질문의 표현 방법은 분명합니다. :) 그러나, 나는 실제 문제를 단순화하려고 애썼다. 저는 이것을 답으로 표시하고 훨씬 더 상세한 질문을 올릴 것입니다. 감사합니다, Iulian – Iulian

+0

@ lulian 더 자세한 질문을 추가 할 때 알려주십시오 –

+0

Marc - 고맙습니다 [link] (http://stackoverflow.com/questions/25951775/protobuf-net-lazy-streaming- 필드 비 직렬화). – Iulian