2010-02-22 4 views

답변

1

저는 C++ API를 사용하지 않았기 때문에 좀 더 많은 컨텍스트/정보를 제공해야합니다. 이 방법은 무엇을합니까? 아마도 샘플 사용법일까요?

당신이 스트림에서 데이터를 소모하는 경우가있다 "WithLengthPrefix"버전은 메시지를 불 연속적하기 위해 제한 자동화, 또는 공개 API에 나는 단지 스트림에서 다음 길이을 읽을 수있는 방법을 생각 .

을 serialize 할 때을 직렬화하려는 경우 현재 가장 쉬운 옵션은 더미 스트림으로 직렬화하고 길이를 추적하는 것일 수 있습니다. 이상하게도, protobuf-net의 초기 버전은 "작업을하지 않고 길이를 얻으십시오"라는 방법을 사용했지만 protobuf-net에 대한 토론을 마친 후에는 이것을 제거했습니다. 직렬화 된 데이터는 분명히 추적됩니다. 그러나 API는 오브젝트의 2 진 데이터 길이와 다르기 때문에 "무료"로 사용할 수 없습니다.

유스 케이스가 무엇인지 명확히한다면, 아직 사용하지 않았 으면 쉽게 사용할 수 있다고 확신합니다.


덧글; 그것이 내가 의심했던 것이다. 왜냐하면 protobuf-net은 바이너리 변환을 마지막 순간까지 연기하기 때문에 (왜냐하면 그것은 몇몇 자체 생성 코드가 아닌 일반적인 .NET 유형을 다루기 때문에) 작업을 수행하지 않고이 값을 얻는 자동 방법이 없다. Stream.Null에 글을 쓰면이 값을 얻을 수있는 메커니즘을 추가 할 수 있습니까? 그래도 데이터가 필요한 경우에 글을 쓰고 에 데이터를 복사하기 전에 확인하는 것이 좋습니다.

+0

Message :: ByteSize() 메서드는 메시지의 직렬화 된 크기와 모든 하위 메시지를 포함한 데이터를 반환합니다. SerializeWithLengthPrefix() 호출보다 먼저 버퍼를 지정하는 비슷한 기능을 찾고 있었지만 대안으로 MemoryStream이 확장 버퍼를 처리하고 ToArray() 호출을 사용하여 네트워킹 코드의 버퍼를 확보 할 수있었습니다. –

+0

@ Sébastien Taylor - 업데이트 드리겠습니다 ... –