使文件格式可扩展

时间:2010-11-14 05:40:09

标签: serialization

我正在编写一个特定的序列化系统。第一个版本效果很好。它是一个分层的字符串键,数据值系统。因此,要获得特定值,请导航到特定节点并说出getInt(“某些键”)等。

我对当前系统的问题是文件大小非常快。

我将通过添加字符串表来解决这个问题。这个问题是我想不出一种支持旧系统的方法。我只有一个32位长的文件标识符。

我可以更改文件标识符,但每次我对格式进行另一次更改时,我都需要再次更改标识符。

在支持旧功能的同时实现新功能的优雅方式是什么?

我研究了PNG格式,创建块似乎是一个很好的方法。

有没有其他建议你可以给我关于块依赖等等?

1 个答案:

答案 0 :(得分:2)

如果您需要二进制格式,请查看Google内部用于RPC的Protocol Buffers以及记录的长期序列化。协议缓冲区的每个字段由整数ID标识。旧应用程序忽略(并传递)他们不理解的字段,因此您可以安全地添加新字段。您永远不会重复使用已弃用的字段ID或更改字段的类型。

协议缓冲区支持基本类型(bool,int32,int64,字符串,字节数组)以及重复甚至递归嵌套的消息。不幸的是,它们不支持地图,因此您必须将地图转换为(键,值)列表。

不要把所有时间花在烦扰序列化和反序列化上。它没有设计protobufs那么有趣。