Serialization 使文件格式可扩展

Serialization 使文件格式可扩展,serialization,Serialization,我正在写一个特别的连载系统。第一个版本运行良好。这是一个分层字符串键,数据值系统。因此,为了获得一个特定的值,您导航到一个特定的节点,然后说getInt(“某个键”)等等 我对当前系统的问题是,文件大小很快就会变大 我将通过添加一个字符串表来解决这个问题。问题是我想不出一个方法来支持旧系统。我只有一个32位长的文件标识符 我可以更改文件标识符,但每次对格式进行另一次更改时,我都需要再次更改标识符 在支持旧功能的同时实现新功能的优雅方式是什么 我研究过PNG格式,创建块似乎是一个很好的方法 在区块

我正在写一个特别的连载系统。第一个版本运行良好。这是一个分层字符串键,数据值系统。因此,为了获得一个特定的值,您导航到一个特定的节点,然后说getInt(“某个键”)等等

我对当前系统的问题是,文件大小很快就会变大

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

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

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

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


在区块依赖性等方面,您还有什么其他建议吗?

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

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

不要把所有的时间都花在序列化和反序列化上。它不像设计protobufs那样有趣