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

Zep*_*Guo 0 java hbase protocol-buffers

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

Java具有"可序列化".为什么不用它?

Jon*_*eet 8

  • 效率:协议缓冲区在传输与Java二进制序列化相同数量的数据时通常更有效
  • 可移植性:据我所知,Java二进制序列化在Java之外并没有广泛实现(不出所料)
  • 鲁棒性无关变化面前:除非你手动指定序列化的UUID,你可以为此作出重大更改不接触的数据在Java中.伊克.
  • 向后和向前兼容性:旧代码可以读取新代码写入的数据.新代码可以读取旧代码写入的数据.(你仍然需要小心,并且proto2和proto3之间的变化含义略有不同,但基本上protobuf比Java更容易推理.)
  • 这是一个更容易意外引入非序列成员到Java二进制序列化,如原描述符文件是所有有关序列......您不能引用到任意类等.

我已经使用协议缓冲区开展了项目,并且我使用Java二进制序列化进行了项目 - 我非常不愿再使用后者...