XuLizhao 's Notes

时光,漫步


  • 首页

  • 技术

  • 文档

  • 关于

  • 搜索
close

Protocol Buffers协议笔记

时间: 2019-09-24   |   分类: tech     |   阅读: 455 字 ~1分钟

之前二进制序列化火热时Thrift和Protocol Buffers是最常用的协议,这次因为要写protobuf的Java程序,做些简单的记录。

常用数据序列化协议

  • JSON : 不用多介绍,Restful中最常用的,可读性好
  • Protocol Buffers:Google的开源RPC数据协议,最新版protobuf3
  • MessagePack : Locust二次开发用过,性能更好的类JSON二进制协议
  • Thrift:Facebook开源的跨语言数据协议

数据定义

下面用到的示例程序参考文末链接。

数据结构定义,album.proto:

syntax = "proto3";
option java_outer_classname = "AlbumProtos";
option java_package = "com.xulizhao.protobuf";
message Album {
    string title = 1;
    repeated string artist = 2;
    int32 release_year = 3;
    repeated string song_title = 4;
}

说明:repeated代表是一个List类型的字段,之后通常用AddAllXxx()或AddXxx()构造数据。

命令行使用

# 生成Java Code
protoc.exe --java_out=. album.proto

# 生成数据描述文件,Charles之类工具会用到
protoc.exe -oalbum.desc album.proto

Java代码解释

自动生成的Java代码实际包含了数据类定义和Builder方法等。

// 构造数据实例
AlbumProtos.Album albumMessage = AlbumProtos.Album.newBuilder().setTitle(album.getTitle()).build();
// 数据实例转化为二进制
final byte[] binaryAlbum = albumMessage.toByteArray();
// 二进制解析为数据实例
AlbumProtos.Album copiedAlbumProtos = AlbumProtos.Album.parseFrom(binaryAlbum);

参考

  • https://dzone.com/articles/using-googles-protocol-buffers-with-java
  • 本文作者: xulizhao
  • 本文链接: https://xulizhao.com/blog/protobuf/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
#java#
加解密算法学习
sipp压测工具介绍
  • 文章目录
  • 站点概览

xulz

时光,漫步

158 日志
3 分类
37 标签
  • 常用数据序列化协议
  • 数据定义
  • 命令行使用
    • Java代码解释
  • 参考
© 2017 - 2020 XuLizhao 's Notes
Powered by - Hugo/ NexT
津ICP备17010344号-1
0%