【问题标题】:Protocol Buffer better than serialization?协议缓冲区比序列化更好?
【发布时间】:2010-10-12 12:09:34
【问题描述】:

我有一个正在序列化的大型数据结构。在某些时候我需要编辑数据结构中的值。但只是为了更改一个小值,我必须再次重新序列化它而不是更新文件中更改的值。我听说过Google protocol buffer's。使用它可以解决我重写文件的问题吗?使用协议缓冲区而不是 Java 序列化对我来说是更好的选择吗?

【问题讨论】:

    标签: java serialization protocol-buffers


    【解决方案1】:

    协议缓冲区本身就是一种序列化格式,因此它们不会从根本上改变图片(更改值后仍需要重新序列化)。

    Google 的文档声称协议缓冲区比 XML 更紧凑且解析速度更快(这似乎是合理的);不知道它们与本机 Java 序列化相比如何。

    协议缓冲区的优点可能是可移植性(如果用其他语言编写的程序需要读取文件)和可升级性(您可以在不破坏文件格式的情况下向数据结构添加新字段)。

    【讨论】:

      【解决方案2】:

      几点

      1. Protocol Buffers 二进制格式的编辑器 (http://code.google.com/p/protobufeditor/)
      2. 协议缓冲区的文本格式如下:
      # 协议缓冲区的文本表示。 # 这*不是*网络上使用的二进制格式。 人 { 名称:“约翰·多伊” 电子邮件:“jdoe@example.com” }

      见:

      话虽如此,我会使用一种已经在使用的技术(JSon、Xml 等),除非满足以下条件之一

      1. 您需要协议缓冲区的性能
      2. 您已经/计划使用协议缓冲区

      【讨论】:

        【解决方案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 序列化——因此不能直接修饰...

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-05-15
            • 1970-01-01
            • 2011-08-26
            • 1970-01-01
            • 2016-11-10
            • 2011-05-03
            • 2012-03-12
            相关资源
            最近更新 更多