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