一. 描述对象的proto文件

  1. 第一行package:对象经过protobuffer编译后形成java文件,这个文件放在按照package新建的文件夹内
  2. java_package:java类的包名
  3. java_outer_classname:java文件名,也是public class的名字
  4. message定义内部类Person,Person也是要序列化的类
  5. required表示该字段是必须字段,optional是可选字段
  6. repeated根据不同的消息类型解析数据包内的字段,用于自定义的类,数组等
    package  com.lj;
    option java_package="com.lj";
    option java_outer_classname="MyPerson"; message Person{
    required string name=1;
    required int32 id=2;
    optional string email=3; message PhoneNumber{
    required string number=1;
    optional int32 type=2;
    } repeated PhoneNumber phoneNumber=4;
    }

二. 编译描述文件

protoc --proto_path=IMPORT_PATH --java_out=DST_DIR file.proto

三. 序列化与反序列化代码

  1. new Builder().build()方法创建序列化
  2. parseFrom()反序列化
    public class TestProtocalBuffer {
    /**
    * protobuffer序列化 : 1.编写proto文件描述bean 2.命令生成代码 3.java代码调用
    * @param args
    * @throws IOException
    */
    public static void main(String[] args) throws IOException { MyPerson.Person p1 = MyPerson.Person.newBuilder()
    .setName("lj").setId(25629).setEmail("lj72808up@163.com")
    .addPhoneNumber(MyPerson.Person.PhoneNumber.newBuilder().setNumber("13905723516").setType(1)).build(); FileOutputStream os = new FileOutputStream("d://123.txt");
    p1.writeTo(os); // 把文件
    os.close(); } /**
    * protobuffer读取文件反序列化成对象
    * @throws IOException
    */
    @Test
    public void testRead() throws IOException {
    FileInputStream is = new FileInputStream("d://123.txt");
    MyPerson.Person person = MyPerson.Person.parseFrom(is);
    System.out.println(person);
    }
    /** name: "lj"
    id: 25629
    email: "lj72808up@163.com"
    phoneNumber {
    number: "13905723516"
    type: 1
    } **/
    }

protobuffer序列化的更多相关文章

  1. protobuf-net与FlatBuffers

    protobuf-net Protobuf是google开源的一个项目,用户数据序列化反序列化,google声称google的数据通信都是用该序列化方法.它比xml格式要少的多,甚至比二进制数据格式也 ...

  2. 基于netty框架的轻量级RPC实现(附源码)

    前言 Rpc( Remote procedure call):是一种请求 - 响应协议.RPC由客户端启动,客户端向已知的远程服务器发送请求消息,以使用提供的参数执行指定的过程.远程服务器向客户端发送 ...

  3. 基于.NET CORE微服务框架 -谈谈surging 的messagepack、protobuffer、json.net 序列化

    1.前言 surging内部使用的是高性能RPC远程服务调用,如果用json.net序列化肯定性能上达不到最优,所以后面扩展了protobuf,messagepack序列化组件,以支持RPC二进制传输 ...

  4. 使用RabbitMQ放置自己定义对象(不借助序列化工具,比如protobuffer)V2.0

    怎样使用RabbitMQ盛放自己定义的对象呢?一般都会使用序列化工具在投放之前转换一次.从MQ取回的时候再逆序列化还原为本地对象.这里使用C++自带的强制类型装换,将本地对象的内存模型当做自然的序列化 ...

  5. Protocol buffer序列化及其在微信蓝牙协议中的应用

    Protocol buffer是Google出品的一种轻便高效的结构化数据存储格式,可对结构化数据进行序列化,并具有语言无关.平台无关等特点,在通信协议和数据存储等领域已经得到广泛的应用.目前其已经提 ...

  6. Protostuff自定义序列化(Delegate)解析

    背景 在使用Protostuff进行序列化的时候,不幸地遇到了一个问题,就是Timestamp作为字段的时候,转换出现问题,通过Protostuff转换后的结果都是1970-01-01 08:00:0 ...

  7. 基于.NET CORE微服务框架 -surging 基于messagepack、protobuffer、json.net 性能对比

    1.前言 surging内部使用的是高性能RPC远程服务调用,如果用json.net序列化肯定性能上达不到最优,所以后面扩展了protobuf,messagepack序列化组件,以支持RPC二进制传输 ...

  8. Python使用ProtoBuffer

    Python使用ProtoBuffer Protocol Buffers,是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储.通信协议等方面. 就可读性而言感 ...

  9. java序列化测试

    0.前言 本文主要对几种常见Java序列化方式进行实现.包括Java原生以流的方法进行的序列化.Json序列化.FastJson序列化.Protobuff序列化. 1.Java原生序列化 Java原生 ...

随机推荐

  1. 作业6 NABCD模型分析,产品Backlog

    1.N(Need 需求): 随着生活水平的提高,每个家庭中都会有电脑和移动设备,可以更加快捷方便使用软件.以前孩子练习计算能力需要通做习题卷或老师出题目来进行,但现在只要通过这个四则运算的程序,可以自 ...

  2. hdu4632 Palindrome subsequence ——区间动态规划

    link:http://acm.hdu.edu.cn/showproblem.php?pid=4632 refer to: o(╯□╰)o……明明百度找的题解,然后后来就找不到我看的那份了,这位哥们对 ...

  3. LeetCode() Search a 2D MatrixII

    一开始的超时思路 int row=a.size(),col=a[0].size(); for(int i=0;i<row;i++) { if(a[i][col-1] > target &a ...

  4. 查找目录下的所有文件中是否含有某个字符串 linux

    查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM" 查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名 find .|xar ...

  5. 进程kswapd0与events/0消耗大量CPU的问题

    http://www.nowamagic.net/librarys/veda/detail/2539 今天下午网站宕了两次机,发工单给阿里云,发现原因是服务器的CPU 100%了. 重启服务器后,使用 ...

  6. combobox select .change onSelect事件触发

    我现在要完成的功能是:有两个下拉框,当地一个下拉框选择了第一个选项时,第二个下拉框不可用,否则就可用. 用了jQuery easyUI提供的onSelect方法.如下:js文件:$('#select1 ...

  7. vb.net 动态调用api

    Imports System Imports System.Runtime.InteropServices Public Class DllInvoke Public Sub New(ByVal DL ...

  8. gridview+checkbox的各种操作【转】

    来源:http://hi.baidu.com/heavensxq/item/29736dcfbdc30403c710b2b1 1.首先如何在gridview中加入一个checkbox,注意不是chec ...

  9. jmeter制造安全证书

    对安全性有要求的网站一般使用https来加密传输的请求和响应.https离不开证书,关于证书不在多说.Apache的HttpClient支持https, 下面是官方的样例程序,程序中使用了my.sto ...

  10. [你必须知道的.NET]第一回:恩怨情仇:is和as

    本文将介绍以下内 容: • 类型转换 • is/as操作符小议 1. 引言 类型安全是.NET设计之初重点考虑 的内容之一,对于程序设计者来说,完全把握系统数据的类型安全,经常是力不从心的问题.现在, ...