我正在寻找相当于C ++ API Message::ByteSize
的protobuf-net来查找序列化的消息长度(以字节为单位)。
答案 0 :(得分:1)
我没有玩过C ++ API,所以你必须给我更多的上下文/信息。这种方法有什么作用?也许是样本用法?
如果您正在使用流中的数据,那么有“WithLengthPrefix”版本可以自动限制谨慎的消息,或者相信该方法只需读取下一个长度来自流的是公共API。
如果你想获得序列化的到位的长度,那么目前我怀疑最简单的选择可能是序列化为虚拟流并跟踪长度。奇怪的是,早期版本的protobuf-net确实“无需工作就能获得长度”的方法,但在讨论了protobuf-net之后,我删除了这些。显然,仍然会跟踪序列化的数据。但是,由于API不同于对象的二进制数据长度,因此无法“免费”使用。
如果您澄清用例是什么,我相信我们可以轻松获取(如果还没有)。
重新评论;这就是我怀疑的。因为protobuf-net将二进制转换推迟到最后一刻(因为它处理的是常规的.NET类型,而不是一些自生成的代码),没有自动的方法来获取这个值而不进行工作。我可以添加一种机制,通过写入Stream.Null
来获得此值吗?但如果您仍然需要数据 ,您可以从写入MemoryStream
并在复制数据之前检查.Length
中受益。