serialize 된 메시지 길이를 바이트 단위로 확인하려면 C++ API Message::ByteSize
에 해당하는 protobuf-net을 찾고 있습니다.프로토콜 버퍼 C# (protobuf-net) 메시지 :: ByteSize
답변
저는 C++ API를 사용하지 않았기 때문에 좀 더 많은 컨텍스트/정보를 제공해야합니다. 이 방법은 무엇을합니까? 아마도 샘플 사용법일까요?
당신이 스트림에서 데이터를 소모하는 경우가있다 "WithLengthPrefix"버전은 메시지를 불 연속적하기 위해 제한 자동화, 또는 공개 API에 나는 단지 스트림에서 다음 길이을 읽을 수있는 방법을 생각 .
을 serialize 할 때을 직렬화하려는 경우 현재 가장 쉬운 옵션은 더미 스트림으로 직렬화하고 길이를 추적하는 것일 수 있습니다. 이상하게도, protobuf-net의 초기 버전은 "작업을하지 않고 길이를 얻으십시오"라는 방법을 사용했지만 protobuf-net에 대한 토론을 마친 후에는 이것을 제거했습니다. 직렬화 된 데이터는 분명히 추적됩니다. 그러나 API는 오브젝트의 2 진 데이터 길이와 다르기 때문에 "무료"로 사용할 수 없습니다.
유스 케이스가 무엇인지 명확히한다면, 아직 사용하지 않았 으면 쉽게 사용할 수 있다고 확신합니다.
덧글; 그것이 내가 의심했던 것이다. 왜냐하면 protobuf-net은 바이너리 변환을 마지막 순간까지 연기하기 때문에 (왜냐하면 그것은 몇몇 자체 생성 코드가 아닌 일반적인 .NET 유형을 다루기 때문에) 작업을 수행하지 않고이 값을 얻는 자동 방법이 없다. Stream.Null
에 글을 쓰면이 값을 얻을 수있는 메커니즘을 추가 할 수 있습니까? 그래도 데이터가 필요한 경우에 글을 쓰고 에 데이터를 복사하기 전에 확인하는 것이 좋습니다.
Message :: ByteSize() 메서드는 메시지의 직렬화 된 크기와 모든 하위 메시지를 포함한 데이터를 반환합니다. SerializeWithLengthPrefix() 호출보다 먼저 버퍼를 지정하는 비슷한 기능을 찾고 있었지만 대안으로 MemoryStream이 확장 버퍼를 처리하고 ToArray() 호출을 사용하여 네트워킹 코드의 버퍼를 확보 할 수있었습니다. –
@ Sébastien Taylor - 업데이트 드리겠습니다 ... –
페이징 Marc Gravell ... :) –
페이징 고려하십시오 –