基于Protobuf动态解析在Java中的应用包含例子程序-创新互联
最近在做ProtoBuf相关的项目,其中用到了动态解析,网上看了下相关资料和博文都比较少,自己来写一个记录一下学习过程。

Protocol Buffers是结构化数据格式标准,提供序列化和反序列方法,用于存储和交换。语言中立,平台无关、可扩展。目前官方提供了C++、Java、Python API,也有其他语言的开源api(比如php)。可通过 .proto文件生成对应语言的类代码
如果已知protobuf内容对应的是哪个类对象,则可以直接使用反序列化方法搞定(Xxx.parseFrom(inputStream)由二进制转换,TextFormat.merge(string, xxxBuilder)由文本转换)
而我们经常遇到的情况是,拿到一个被protobuf序列化的二进制内容,但不知道它的类型,无法获得对应的类对象。这种多见于需要处理各种各样未知的ProtoBuf对象的系统。ProtoBuf提供了动态解析机制来解决这个问题,它要求提供二进制内容的基础上,再提供对应类的Descriptor对象,在解析时通过DynamicMessage类的成员方法来获得对象结果。
最后问题就是Descriptor对象从哪里来?这是通过protoc --descriptor_set_out=$outputpath 命令生成descriptor文件,进而得到的。
代码如下:
cinema.proto
option java_package="com.liulei.cinema";
enum MovieType{
CHILDREN=1;
ADULT=2;
NORMAL=3;
OHTER=4;
}
enum Gender{
MAN=1;
WOMAN=2;
OTHER=3;
}
message Movie{
required string name=1;
required MovieType type=2;
optional int32 releaseTimeStamp=3;
optional string description=4;
}
message Customer{
required string name=1;
optional Gender gender=2;
optional int32 birthdayTimeStamp=3;
}
message Ticket{
required int32 id=1;
required Movie movie=2;
required Customer customer=3;
}
名称栏目:基于Protobuf动态解析在Java中的应用包含例子程序-创新互联
浏览地址:http://www.jxjierui.cn/article/cegjec.html


咨询
建站咨询
