【发布时间】:2010-10-12 12:09:34
【问题描述】:
我有一个正在序列化的大型数据结构。在某些时候我需要编辑数据结构中的值。但只是为了更改一个小值,我必须再次重新序列化它而不是更新文件中更改的值。我听说过Google protocol buffer's。使用它可以解决我重写文件的问题吗?使用协议缓冲区而不是 Java 序列化对我来说是更好的选择吗?
【问题讨论】:
标签: java serialization protocol-buffers
我有一个正在序列化的大型数据结构。在某些时候我需要编辑数据结构中的值。但只是为了更改一个小值,我必须再次重新序列化它而不是更新文件中更改的值。我听说过Google protocol buffer's。使用它可以解决我重写文件的问题吗?使用协议缓冲区而不是 Java 序列化对我来说是更好的选择吗?
【问题讨论】:
标签: java serialization protocol-buffers
协议缓冲区本身就是一种序列化格式,因此它们不会从根本上改变图片(更改值后仍需要重新序列化)。
Google 的文档声称协议缓冲区比 XML 更紧凑且解析速度更快(这似乎是合理的);不知道它们与本机 Java 序列化相比如何。
协议缓冲区的优点可能是可移植性(如果用其他语言编写的程序需要读取文件)和可升级性(您可以在不破坏文件格式的情况下向数据结构添加新字段)。
【讨论】:
几点
见:
话虽如此,我会使用一种已经在使用的技术(JSon、Xml 等),除非满足以下条件之一
【讨论】:
如果您关心性能,请不要对数据使用文本格式。如果要在不反序列化的情况下修改数据,则需要使用固定记录数据格式。您可能必须手动发明它。然后寻找文件中的正确位置并仅重写更改的字段。您可以查看DataOutputStream 以开始使用,或者使用诸如HSQLDB 之类的数据库来存储和编辑您的数据。
考虑更多,除非您的对象非常简单,否则我认为数据库将是更好的选择。
有关 DataOutputStream 的更多信息: http://download.oracle.com/javase/tutorial/essential/io/datastreams.html
Java 数据库: http://java-source.net/open-source/database-engines
【讨论】:
您需要一种可以直接修改的序列化格式,例如 XML 或 JSON。 Google 协议缓冲区是一种二进制格式——作为 java 序列化——因此不能直接修饰...
【讨论】: