Буферы протокола c # (protobuf-net) Сообщение :: ByteSize - PullRequest
1 голос
/ 22 февраля 2010

Я ищу протокол protobuf-net, эквивалентный API C ++ Message::ByteSize, чтобы узнать сериализованную длину сообщения в байтах.

1 Ответ

1 голос
/ 22 февраля 2010

Я не играл с C ++ API, поэтому вам придется дать мне немного больше контекста / информации. Что делает этот метод? Возможно пример использования?

Если вы используете данные из потока, существуют версии «WithLengthPrefix» для автоматизации ограничения дискретных сообщений, или я полагаю метод простого чтения следующей длины из поток находится в общедоступном API.

Если вы хотите получить длину вместо сериализации, то в настоящее время я подозреваю, что самым простым вариантом может быть сериализация в фиктивный поток и отслеживание длины. Как ни странно, ранняя версия protobuf-net имела методы «получи длину без выполнения работы», но после обсуждения в protobuf-net я удалил их. Сериализованные данные все еще отслеживаются, очевидно. Однако, поскольку API отличается от длины двоичных данных для объектов, он не доступен «бесплатно».

Если вы поясните, каков вариант использования, я уверен, что мы можем сделать его легко доступным (если это еще не сделано).


Re комментарий; это то, что я подозревал. Поскольку protobuf-net откладывает бинарный перевод до последнего момента (поскольку он имеет дело с обычными типами .NET, а не с каким-либо самостоятельно генерируемым кодом), нет автоматического способа получить это значение без выполнения работы. Я мог бы добавить механизм, позволяющий вам получить это значение, записав в Stream.Null? но если вам нужны данные в любом случае , вам может быть полезно просто записать в MemoryStream и проверить .Length перед копированием данных.

...