2

我正在学习protobuf的实现。但是,有一点我无法理解。框架如何将子消息(对象)序列化为具有可变头部的缓冲区,即使有时它的长度真的很难弄清楚!将其序列化到其他地方并稍后将其复制到缓冲区中?

4

1 回答 1

1

我能想到的至少有四种方法,只要它得到正确的答案,“哪个”是一个实现细节:

  • 序列化到单独的缓冲区,然后复制
  • 对标头的长度做出假设,跳过它,序列化,然后返回并修复标头(可能涉及移动,但并非总是如此)
  • 如果您使用构建器,它可能会在您添加数据时单独序列化,然后再组合:在这种情况下,确定长度是微不足道的
  • 或者它可以有代码来计算值的长度而不实际序列化

我已经在不同的时间实施了其中至少 3 种方式!

于 2012-10-13T10:12:36.123 回答