Google protobuf for java 小试

Protocol buffers是一个用来序列化结构化数据的技术,支持多种语言诸如C++、Java以及Python语言,可以使用该技术来
持久化数据或者序列化成网络传输的数据。相比较一些其他的XML技术而言,该技术的一个明显特点就是更加节省空间(以二
进制流存储)、速度更快以及更加灵活。

创建Person.proto文件
message Person {
     optional int64 id=1;
    optional string name=2;
    optional string sex=3;
    optional string tel=4;
}


Person 为定义一个消息类型为Person

Person共有三个字段
都为optional(可选的)
int64对应java的long
string对应java的String
在消息定义中,每个字段都有唯一的一个标识符,可以理解为索引,用于识别各个字段
id=1,name=2,sex=3,tel=4,1,2,3,4并不是默认值

默认值可以这样设置:optional int32 result_per_page = 3 [default = 10];

required:一个格式良好的消息一定要含有1个这种字段。表示该值是必须要设置的;
optional:消息格式中该字段可以有0个或1个值(不超过1个)
repeated:在一个格式良好的消息中,这种字段可以重复任意多次(包括0次)。重复的值的顺序会被保留。表示该值可以重复,相当于java中的List

由于一些历史原因,基本数值类型的repeated的字段并没有被尽可能地高效编码。在新的代码中,用户应该使用特殊选项[packed=true]来保证更高效的编码
repeated int32 samples = 4 [packed=true];


下载:protoc-2.4.1-win32.zip用于生成java文件
下载客户端:protobuf-java-2.4.1.jar,用户客户端调用


可以讲Person.proto放到你解压的protoc-2.4.1-win32.zip里面的protoc.exe同一级目录
然后cmd cd到该目录 执行protoc.exe --java_out=./ Person.proto,此时在这个目录下回生成Person.java文件

在java客户端
序列化:
Person.Persona.Builder b = Person.Persona.newBuilder();
            b.setId(i);
            b.setName("ajun"+1);
            b.setSex("男");
            b.setTel("6086666");
            Person.Persona p = b.build();
            
byte [] value = p.toByteArray()
反序列化:
Person.Persona last = Person.Persona.parseFrom(person);

proto type --- java type


 

.proto类型

Java 类型

C++类型

备注

double

double

double

 

float

float

float

 

int32

int

int32

使用可变长编码方式。编码负数时不够高效——如果你的字段可能含有负数,那么请使用sint32。

int64

long

int64

使用可变长编码方式。编码负数时不够高效——如果你的字段可能含有负数,那么请使用sint64。

uint32

int[1]

uint32

Uses variable-length encoding.

uint64

long[1]

uint64

Uses variable-length encoding.

sint32

int

int32

使用可变长编码方式。有符号的整型值。编码时比通常的int32高效。

sint64

long

int64

使用可变长编码方式。有符号的整型值。编码时比通常的int64高效。

fixed32

int[1]

uint32

总是4个字节。如果数值总是比总是比228大的话,这个类型会比uint32高效。

fixed64

long[1]

uint64

总是8个字节。如果数值总是比总是比256大的话,这个类型会比uint64高效。

sfixed32

int

int32

总是4个字节。

sfixed64

long

int64

总是8个字节。

bool

boolean

bool

 

string

String

string

一个字符串必须是UTF-8编码或者7-bit ASCII编码的文本。

bytes

ByteString

string

可能包含任意顺序的字节数据。







  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飓风zj

感谢打赏,thanks

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值