zoukankan      html  css  js  c++  java
  • protobuffer序列化

    一. 描述对象的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
      		}                          **/
      }
      
      
  • 相关阅读:
    ELK日志分析系统之elasticsearch7.x最新版安装与配置
    Mysql用户root密码找回
    Java进程占用内存过高,排查解决方法
    dumpe2fs: Bad magic number in super-block
    关于web常见的安全问题
    pycharm中模块matplolib生成图表出现中文乱码解决方法
    一个Java语言所写的shop网站框架明细
    关于在linux系统环境下解压rar压缩文件
    python的pip管理工具
    解决nginx负载均衡高可用keepalived只针对物理机的问题
  • 原文地址:https://www.cnblogs.com/72808ljup/p/5220961.html
Copyright © 2011-2022 走看看