Я не играл с C ++ API, поэтому вам придется дать мне немного больше контекста / информации. Что делает этот метод? Возможно пример использования?
Если вы используете данные из потока, существуют версии «WithLengthPrefix» для автоматизации ограничения дискретных сообщений, или я полагаю метод простого чтения следующей длины из поток находится в общедоступном API.
Если вы хотите получить длину вместо сериализации, то в настоящее время я подозреваю, что самым простым вариантом может быть сериализация в фиктивный поток и отслеживание длины. Как ни странно, ранняя версия protobuf-net имела методы «получи длину без выполнения работы», но после обсуждения в protobuf-net я удалил их. Сериализованные данные все еще отслеживаются, очевидно. Однако, поскольку API отличается от длины двоичных данных для объектов, он не доступен «бесплатно».
Если вы поясните, каков вариант использования, я уверен, что мы можем сделать его легко доступным (если это еще не сделано).
Re комментарий; это то, что я подозревал. Поскольку protobuf-net откладывает бинарный перевод до последнего момента (поскольку он имеет дело с обычными типами .NET, а не с каким-либо самостоятельно генерируемым кодом), нет автоматического способа получить это значение без выполнения работы. Я мог бы добавить механизм, позволяющий вам получить это значение, записав в Stream.Null
? но если вам нужны данные в любом случае , вам может быть полезно просто записать в MemoryStream
и проверить .Length
перед копированием данных.