我正在寻找protobuf-net相当于C++ API Message::ByteSize
来查找以字节为单位的序列化消息长度。协议缓冲区c#(protobuf-net)消息::字节大小
回答
我还没有玩过C++ API,所以你必须给我更多的上下文/信息。这种方法做什么?也许是一个示例用法?
如果你是消费从数据流中,有“WithLengthPrefix”版本自动限制慎重的消息,或者我相信刚刚从流中读取下一个长度的方法是对公共API。
如果你想获得长度为的地方的序列化,那么目前我怀疑最简单的选择可能是序列化为一个虚拟流并跟踪长度。奇怪的是,protobuf-net的早期版本确实“没有做好工作就得到了这个长度”方法,但是在讨论了protobuf-net之后,我删除了这些方法。显然,序列化的数据仍然被追踪。但是,因为API不同于对象的二进制数据长度,因此“免费”不可用。
如果您澄清用例是什么,我相信我们可以轻松地提供它(如果它尚未)。
重新评论;这是我怀疑的。由于protobuf-net将二进制翻译推迟到最后一刻(因为它处理的是常规的.NET类型,而不是一些自生成的代码),所以没有自动的方式来获得这个值而不做任何工作。我可以添加一个机制让你通过写入Stream.Null
来获得这个值?但如果您仍然需要的数据您可能只需要在复制数据之前先写入MemoryStream
并检查.Length
即可受益。
Message :: ByteSize()方法返回消息的序列化大小及其所有数据(包括子消息)。我正在寻找一个类似的功能来在SerializeWithLengthPrefix()调用之前分配缓冲区,但作为替代方案,可以让MemoryStream处理扩展缓冲区,并使用ToArray()调用来获取网络代码的缓冲区。 – 2010-02-22 21:03:05
@SébastienTaylor - 我会更新... – 2010-02-23 05:11:24
- 1. 谷歌协议缓冲区消息到字节数组C++(Windows)
- 2. 协议缓冲区:无固定大小缓冲区的符号?
- 3. 处理非常大的String消息的协议缓冲区?
- 4. 协议缓冲区
- 5. 谷歌协议缓冲区:找出什么消息编码在字节[]
- 6. 没有可选字段的协议缓冲区:固定大小?
- 7. 在协议缓冲区消息中存储二进制数据缓冲区
- 8. Android和协议缓冲区
- 9. 谷歌协议缓冲区 -
- 10. 协议缓冲区挑战
- 11. JPA协议缓冲区
- 12. 协议缓冲区记录
- 13. 协议缓冲区扩展
- 14. gson vs协议缓冲区
- 15. 协议缓冲区 - @ModelAttribute
- 16. Delphi协议缓冲区?
- 17. 协议缓冲区文件?
- 18. 协议缓冲区错误
- 19. 谷歌的协议缓冲区在c#
- 20. 查看协议缓冲区消息文件
- 21. Google协议缓冲区,如何处理多个消息类型?
- 22. 协议缓冲区作为消息过活动Mq
- 23. 显示协议缓冲区消息中的所有元素
- 24. 确定协议缓冲区消息类型的最佳实践
- 25. 使用Google协议缓冲区多次反序列化消息
- 26. 字典在协议缓冲区
- 27. C Windows缓冲区大小
- 28. C++套接字缓冲区大小
- 29. C字符串静态缓冲区的字节大小
- 30. 协议缓冲区数组中的字节浪费?
Paging Marc Gravell ... :) – 2010-02-22 20:00:26
请考虑分页 – 2010-02-22 20:34:08