二进制解析器还是序列化?

时间:2010-08-25 23:03:35

标签: c++ parsing serialization binary protocols

我想为游戏存储不同对象的图形,它们的类可能相关也可能不相关,它们可能包含也可能不包含简单结构的向量。

  • 我希望解析操作快,数据可能很大。
  • 添加新东西应该不难,也不应该破坏向后兼容性。
  • 较小的文件大小是一种重要的
  • 可读性计数

通过序列化我的意思是,让对象自己序列化,这是有效的,但我需要为不同的对象编写不同的序列化方法。

通过二进制解析/编写,我的意思是,创建一个新的解析器/编写器树,它保存和读取这些对象的数据,然后传递它以使我的对象推送/拉取它们的数据。

我也可以使用json,但它的读取速度可能相当慢,而且当涉及到相当大的矩阵和数字时,它的尺寸效果不是很好。

3 个答案:

答案 0 :(得分:3)

逐点:

  • 快速解析:二进制(因为你不一定要“解析”,你可以反序列化)
  • 添加新内容:文字
  • 较小:文本(即使gzip压缩文本大于二进制文件,也不会大得多)。
  • 可读性:文字

所以这是三个文本投票,一个二分投票。就个人而言,除了图像(以及其他“自然”二进制数据)之外,我还会使用文本。然后,将所有内容存储在一个大的zip文件中(我可以想到几个游戏会做这个或接近它的东西)。

好的读物:The Importance of Being TextualPower Of Plain Text

答案 1 :(得分:1)

查看来自Google的协议缓冲区或来自Apache的thrift。虽然它被认为是一种轻松编写有线协议的方法,但它基本上是一种对象序列化机制,可以用十几种语言创建绑定,具有高效的二进制表示,简单的版本控制,快速的性能以及良好的支持。

答案 2 :(得分:0)

我们正在使用Boost.Serialization。不知道它与samkass提供的那些相比如何表现。