Google ProtoBuff 获取、编译、使用示例
来源:互联网 发布:语c kg是什么意思网络 编辑:程序博客网 时间:2024/06/05 13:58
Google ProtoBuff入手
简介
[Google Protocol Buffer](https://developers.google.com/protocol-buffers/)( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。 简单来说就是ProtoBuffer可以将一个Object序列化成二进制数据进行传输与存储,同时可以将序列化的二进制数据反序列化为特定语言的Object。ProtoBuffer优点有:序列化、反序列化速度快,序列化的数据体积小,序列化的数据是二进制数据便于高效传输存储。
下载编译
java语言使用protobuffer需要两个文件
1. protoc.exe 用于编译.proto文件生产对应语言的源代码 2. protobuf-java.jar java运行时依赖包
这两个文件都可以通过下载protobuffer源码进行编译得到
源码下载地址 https://github.com/google/protobuf
protoc.exe文件编译
cd protobuf ./configure --prefix=$INSTALL_DIR make make check make install
protobuf-java.jar需要用maven编译
cd protobuf/javamaven clean package
tobuf-java.jar也可以直接使用maven依赖
<dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>2.5.0</version></dependency>
如果本机没有编译环境可以直接下载已便宜好的程序
下载地址:
protoc.exe
http://repo1.maven.org/maven2/com/google/protobuf/protoc/
https://github.com/google/protobuf/releases
protobuf-java.jar
http://repo1.maven.org/maven2/com/google/protobuf/protobuf-java/
开始使用
1. 定义编写.proto文件
使用protobuffer需要先定义好需要序列化和反序列化的数据结构。用一个.proto文件来描述:
例:userInfo.proto
定义一个User类 有ID Phone Email Sex等字段 1234代表字段在源码中的位置,也是唯一标识
package demo; message User { required int32 ID = 1; required int64 Phone = 2; required string Email = 3; required bool Sex = 4; }
2. 编译.proto文件生产Java源码
将.proto文件和protoc.exe文件放入同一个目录,命令行进入该目录
protoc -I=./ --java_out=./ ./userInfo.proto
执行完成之后会在当前目录下生成一个java源文件 ./demo/UserInfo.java
3. 使用示例
将UserInfo.java拷贝到java工程,并protobuf-java.jar添加到classpath
编写测试代码:
public class Demo { public static void main(String[] args) throws Exception { UserInfo.User.Builder buider=UserInfo.User.newBuilder(); buider.setID(12345).setPhone(13752526262L).setEmail("151221@qq.com").setSex(true); UserInfo.User info = buider.build(); System.out.println("创建一个User对象\n"+info); System.out.println("\n将User对象序列化为字节数组"); byte[] info_byte = info.toByteArray(); System.out.println(info_byte); System.out.println("\n将User对象的序列化字节数组反序列化为java对象"); System.out.println(UserInfo.User.parseFrom(info_byte)); }}
测试运行结果:
创建一个User对象ID: 12345Phone: 13752526262Email: "151221@qq.com"Sex: true将User对象序列化为字节数组[B@49c2faae将User对象的序列化字节数组反序列化为java对象ID: 12345Phone: 13752526262Email: "151221@qq.com"Sex: true
- Google ProtoBuff 获取、编译、使用示例
- google protobuff编译过程
- Google protobuff 安装及使用
- erlang使用protobuff
- protobuff 2.5 使用
- Erlang中使用protobuff
- google v8使用示例
- google v8使用示例
- Rails 使用 Google Analytics 示例
- 开始使用Google Analytics 示例
- protobuff在vs2010下编译时错误:'type'
- google/protobuf--VS2015编译、使用
- Unity3D 5.4.0 终于可以使用protobuff 3.0.0了
- Windows下Google Protobuf Visual Studio自动编译脚本示例
- 编写Python脚本来获取Google搜索结果的示例
- protobuff配置
- Google Protocol Buffer安装编译及使用
- 使用NDK编译Google Protocol Buffer
- 计数排序
- 设备树(一)linux内核主线了解dts
- Unity根据名称递归查找一个物体的子物体
- 对linux根目录下各文件夹的初步认识
- PlaySound函数
- Google ProtoBuff 获取、编译、使用示例
- Android中加载长图的策略(微博的那种)
- BZOJ 2200: [Usaco2011 Jan]道路和航线
- swift 跳到系统设置界面
- hbase 安装
- 《自己动手设计数据库》第13章 评审数据完整性
- Linux chmod命令及权限含义
- leetcode-26 Remove Duplicates from Sorted Array
- java栈的实现