Protocol Buffer for Java快速入门
2016-06-26 11:02
309 查看
Protocol Buffer它是谷歌内部用的一种高效的、可扩展的对结构化数据进行编码的格式规范。是一个用来序列化结构化数据的技术,支持多种语言诸如C++、Java以及Python语言,可以使用该技术来持久化数据或者序列化成网络传输的数据。相比较一些其他的XML技术而言,该技术的一个明显特点就是更加节省空间(以二进制流存储)、速度更快以及更加灵活。
一:编写proto文件
Account.proto
package entity;
option java_package = "com.pp.entity";
option java_outer_classname = "AccountEntity";
message Account {
required int32 id = 1;
required string account = 2;
required string password = 3;
optional string nickname = 4;
required string sex = 5;
optional int32 status = 6 [default = 0];
}
在文件定义中,每个字段都有唯一的一个标识符,可以理解为索引,用于识别各个字段
id=1,account=2,password=3等 并不是默认值
默认值可以这样设置:optional int32 status = 6 [default = 0];
备注:限定修饰符 required ,optional ,repeated
required: 表示是一个必须字段,必须相对于发送方,在发送消息之前必须设置该字段的值,对于接收方,必须能够识别该字段的意思。
optional:表示是一个可选字段,可选对于发送方,在发送消息时,可以有选择性的设置或者不设置该字段的值。
repeated:表示该字段可以包含0~N个元素。其特性和optional一样,但是每一次可以包含多个值,在Java里面对应的是java.util.List类型。
二:下载用于生成源代码的程序
我这里下载win版本的,下载地址:https://github.com/google/protobuf/releases
我这里下载最新稳定版 protoc-2.6.1-win32.zip
解压后,执行
protoc.exe --java_out=. Account.proto
之后会在当前目录生成java的源代码,com.pp.entity目录,拷贝这个目录到ide的src目录
三:运行
首先在项目里面加入protobuf的依赖,注意版本需要和上面下载的保持一致
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>2.6.1</version>
</dependency>
一:编写proto文件
Account.proto
package entity;
option java_package = "com.pp.entity";
option java_outer_classname = "AccountEntity";
message Account {
required int32 id = 1;
required string account = 2;
required string password = 3;
optional string nickname = 4;
required string sex = 5;
optional int32 status = 6 [default = 0];
}
在文件定义中,每个字段都有唯一的一个标识符,可以理解为索引,用于识别各个字段
id=1,account=2,password=3等 并不是默认值
默认值可以这样设置:optional int32 status = 6 [default = 0];
备注:限定修饰符 required ,optional ,repeated
required: 表示是一个必须字段,必须相对于发送方,在发送消息之前必须设置该字段的值,对于接收方,必须能够识别该字段的意思。
optional:表示是一个可选字段,可选对于发送方,在发送消息时,可以有选择性的设置或者不设置该字段的值。
repeated:表示该字段可以包含0~N个元素。其特性和optional一样,但是每一次可以包含多个值,在Java里面对应的是java.util.List类型。
二:下载用于生成源代码的程序
我这里下载win版本的,下载地址:https://github.com/google/protobuf/releases
我这里下载最新稳定版 protoc-2.6.1-win32.zip
解压后,执行
protoc.exe --java_out=. Account.proto
之后会在当前目录生成java的源代码,com.pp.entity目录,拷贝这个目录到ide的src目录
三:运行
首先在项目里面加入protobuf的依赖,注意版本需要和上面下载的保持一致
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>2.6.1</version>
</dependency>
package com.pp.entity; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.OutputStream; import com.pp.entity.AccountEntity.Account; public class App { /** * 序列化 */ public static void write() throws Exception { Account.Builder builder = Account.newBuilder(); builder.setId(1); builder.setAccount("admin"); builder.setPassword("123456"); builder.setNickname("Administrator"); builder.setSex("M"); byte[] info = builder.build().toByteArray(); try(OutputStream out = new FileOutputStream("d:/tmp/account.bin")){ out.write(info); } } /** * 反序列化 */ public static void read() throws Exception { try(FileInputStream fis = new FileInputStream("d:/tmp/account.bin")) { byte[] data = new byte[fis.available()]; fis.read(data); Account account = AccountEntity.Account.parseFrom(data); System.out.println("id : " + account.getId()); System.out.println("account : " + account.getAccount()); System.out.println("password : " + account.getPassword()); System.out.println("nickname : " + account.getNickname()); System.out.println("sex : " + account.getSex()); System.out.println("status : " + account.getStatus()); } } public static void main(String[] args) throws Exception { write(); read(); } }
相关文章推荐
- Android之使用Http协议实现文件上传功能
- 网马生成器 MS Internet Explorer XML Parsing Buffer Overflow Exploit (vista) 0day
- SQL Server 2016里的sys.dm_exec_input_buffer的问题
- 揭秘SQL Server 2014有哪些新特性(2)-固态硬盘 Buffer Pool(缓冲池) 扩展
- php中ob(Output Buffer 输出缓冲)函数使用方法
- php中mysql操作buffer用法详解
- Protocol Buffer技术深入理解(C++实例)
- mysqldump造成Buffer Pool污染的研究
- mysql read_buffer_size 设置多少合适
- Node.js中使用Buffer编码、解码二进制数据详解
- nginx高并发配置
- 用pdo_oci 取数据报错或被截取 UTF-8 output gets truncated
- Some Notes of Protocol Buffer C++
- 优化mysql之key_buffer_size设置
- mysql优化的重要参数 key_buffer_size table_cache
- mysql read_buffer_size 设置多少合适
- SQL Server 2016里的sys.dm_exec_input_buffer的问题
- String类
- mysql5.6之key_buffer_size优化设置