为什么在java中使用协议缓冲区

时间:2015-06-11 14:52:04

标签: java hbase protocol-buffers

最近,我读了HBase的代码。我发现客户端使用protobuf与HBase代码中的服务器进行通信。

Java具有“可序列化”。为什么不用呢?

2 个答案:

答案 0 :(得分:8)

  • 效率:协议缓冲区在传输与Java二进制序列化相同数量的数据时通常更有效率
  • 可移植性:就我所知(不出所料)而言,Java二进制序列化并未在Java之外广泛实现
  • 面对无关的更改时的稳健性:除非您手动指定可序列化的UUID,否则您最终可以在不触及Java中的所有数据的情况下进行重大更改。 ICK。
  • 向后和向前兼容性:旧代码可以读取新代码写入的数据。新代码可以读取旧代码写入的数据。 (你仍然需要小心,变化的含义在proto2和proto3之间略有不同,但基本上protobuf比Java更容易推理。)
  • 将不可序列化的成员意外地引入Java二进制序列化会更容易,因为原型描述符文件所有关于序列化...你不能指任意的等等。

我使用协议缓冲区开展项目工作,并且我使用Java二进制序列化处理项目 - 而且我非常不愿再次使用后者...

答案 1 :(得分:0)

Protocol Buffers是一种开放的序列化协议。您可以使用C ++或C#编写客户端,如果两端都使用相同的协议缓冲模式,仍然可以与服务器通信。 Java Serializable仅限Java