您的位置:首页 > 编程语言 > Java开发

Protobuf在Java中的使用

2015-09-30 10:59 471 查看

1.Protobuf的理解

是用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构,总的来说就是传输协议中的一种。Protobuf的官方网址为http://code.google.com/apis/protocolbuffers/docs/tutorials.html


核心:

1,.proto文件

相当于确定数据协议,数据结构中存在哪些数据,数据类型是怎么样

2,modifiers

2-1 required 不可以增加或删除的字段,必须初始化

2-2 optional 可选字段,可删除,可以不初始化

2-3 repeated 可重复字段, 对应到java文件里,生成的是List

3,Message

在proto文件里,数据的协议时以Message的形式表现的。

4, Build

生成具体的java类时,例如Person.java,同时会存在build方法。文档的意思是对于转化后的数据,具有唯一性,build提供了便利的方法来初始化这些数据。

2.Protobuf的安装与在netty中的使用

1.首先要在Java项目中新创建一个.proto文件,相当于确定数据协议,数据结构中存在哪些数据,数据类型是怎么样
option java_package = "cn.huikey.chat.proto";//写的是生成文件的包名
option java_outer_classname = "ChatMessage";//生成的类文件名
//消息类
message  Message{
optional string senderName = 2;
optional string receiverName=6;
optional string content=9;
optional string type=10;
optional string palindType=11;
optional int32 status=12;
}
</pre><pre name="code" class="java" style="font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px;">3.添加jar,protocol.exe(jar与exe必须为同一版本),编写cmd文件
@ECHO OFF
cd /d D:\MyEclipseWork\ProtobufServer\proto   //proto文件名根目录
protoc --java_out=../chat chatMessage.proto    //资源包+空格+proto文件名
pause

4.运行cmd文件即可

5.protobuf在netty中的使用

1.protobuf的数据读取
a.数据的写入
Builder Builder = Message.newBuilder();
Builder.setType("0");
Builder.setReceiverName("admin");
byte[] Bytes = Builder.build().toByteArray();
ByteBuf Buf = Unpooled.buffer(Bytes.length);
Buf.writeBytes(Bytes);
channel.writeAndFlush(Buf);



b.数据的读取
Message message=(Message) msg;
System.out.println(message);

c.Protobuf的赋值
ChatMessage.Message.newBuilder()
.setType(Contact.FRIENDSTRUE)
.setReceiverName(message.getReceiverName()
.setSenderName(message.getSenderName())
.setStatus(Contact.SUCCESS)
.setContent("添加好友成功!")).build;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息