那些很基础的教程之Protobuf
简介
protocol buffers
是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。
Protocol Buffers
是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML
,但是比 XML
更小(3 ~ 10倍)
、更快(20 ~ 100倍)
、更为简单。
你可以定义数据的结构,然后使用特殊生成的源代码轻松的在各种数据流中使用各种语言进行编写和读取结构数据。你甚至可以更新数据结构,而不破坏由旧数据结构编译的已部署程序。
下载地址
https://github.com/protocolbuffers/protobuf/releases
到 release
仓库 选择最新的包下载(我不管,我就要最新的)
安装
cd protobuf-3.17.3
cp -r include/ /usr/local/include/
cp -r bin/ /usr/local/bin/
搞定,如此丝滑~
使用
UserPB.info
syntax = "proto3";
option java_outer_classname = "UserPB";
option java_package = "com.jiuling.resource.proto";
message info{
string addr = 1; //地址
string group = 2; //分组
}
ProtoBufTest
public static void main(String[] args) {
UserPB.info info = UserPB.info.newBuilder().setAddr("测试").setGroup("group1").build();
System.out.println(info);
byte[] data = info.toByteArray();
try {
UserPB.info p2 = UserPB.info.parseFrom(data);
System.out.println(p2);
} catch (InvalidProtocolBufferException e) {
e.printStackTrace();
}
}
输出结果:
处理中文异常
public static void main(String[] args) {
UserPB.info info = UserPB.info.newBuilder().setAddr("测试").setGroup("group1").build();
System.out.println(TextFormat.printer().escapingNonAscii(false).printToString(info));
System.out.println(info.getAddr());
// System.out.println(info);
byte[] data = info.toByteArray();
try {
UserPB.info p2 = UserPB.info.parseFrom(data);
System.out.println(TextFormat.printer().escapingNonAscii(false).printToString(p2));
System.out.println(p2.getAddr());
} catch (InvalidProtocolBufferException e) {
e.printStackTrace();
}
}
搞定
主要是记录一些,很基础,但是你就是要去搜,就很烦的基操~