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