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

why use protocol buffers in java

最近看了HBase.I的代码,在HBase的代码中发现client使用protobuf与server通信。

Java 有 "Serializable"。为什么不使用它?

Protocol Buffers 是一个开放的序列化协议。您可以用 C++ 或 C# 编写客户端,并且如果两端都使用相同的 Protocol Buffer 架构,仍然能够与服务器通信。 Java 可序列化仅 Java

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

我从事过使用协议缓冲区的项目,我也从事过使用 Java 二进制序列化的项目 - 我 非常 不愿意使用又是后者...