1

我正在寻找与 C++ API 等效的 protobuf-net,Message::ByteSize以找出以字节为单位的序列化消息长度。

4

1 回答 1

1

我没有玩过 C++ API,所以你必须给我更多的上下文/信息。这个方法有什么作用?也许是一个示例用法?

如果您正在使用流中的数据,则有“WithLengthPrefix”版本可以自动限制谨慎的消息,或者我相信从流中读取下一个长度的方法是在公共 API 上。

如果您想获得一个长度来代替序列化,那么目前我怀疑最简单的选择可能是序列化到一个虚拟流并跟踪长度。奇怪的是,protobuf-net 的早期版本确实有“不做工作就得到长度”的方法,但在对 protobuf-net 进行讨论后,我删除了这些方法。显然,序列化的数据仍然被跟踪。但是,由于 API 不同于对象的二进制数据长度,因此不能“免费”使用。

如果您澄清用例是什么,我相信我们可以轻松使用它(如果还没有的话)。


重新评论;这就是我的怀疑。因为 protobuf-net 将二进制转换推迟到最后一刻(因为它处理的是常规的 .NET 类型,而不是一些自生成的代码),所以没有不做这项工作的自动获取这个值的方法。我可以添加一种机制,让您通过写入Stream.Null? 但是,如果您仍然需要数据您可能会受益于在复制数据之前写入MemoryStream和检查.Length

于 2010-02-22T20:43:18.180 回答