zoukankan      html  css  js  c++  java
  • protocol buffer的简单使用

    protocol buffer是一个高效的结构化数据存储格式,用来结构化数据的序列化与反序列化。目前支持java、c++、Python

    相对于json而言:

      数据量跟小

      其他的还没看出什么优势

    下载地址:

    protobuf-2.5,protoc-2.5.0-win32.zip

    安装过程:

    1、进入解压后的java目录,查看readme.txt

    2、把protoc.exe放入到protobuf-2.5中的

    3、运行mvn -test

    编写protocol buffer需要以下三步

    1、定义消息格式文件,以proto结尾

      

    package tutorial;
    option java_package = "com.example.tutorial";
    option java_outer_classname = "PersonProtos";
    
    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 phone=4;
    	
    }
    

      

    2、使用编译器生成java文件

      protoc --java_out=. person.proto

    3、使用protocol buffer提供的api编写应用程序

    package com.example.tutorial;
    
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import com.example.tutorial.PersonProtos.Person;
    import com.example.tutorial.PersonProtos.Person.PhoneNumber;
    
    public class ProtocolBufferExample {
    	public static void main(String[] args) {
    		Person person = Person.newBuilder()
    			.setName("zhengqun")
    			.setEmail("717401115@qq.com")
    			.setId(111)
    			.addPhone(PhoneNumber.newBuilder().setNumber("15351506736").setType(1))
    			.addPhone(PhoneNumber.newBuilder().setNumber("17751544242").setType(2))
    			.build();
    		
    		FileOutputStream out = null;
    		try {
    			out = new FileOutputStream("example.txt");
    			person.writeTo(out);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}finally{
    			try {
    				out.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    		
    		FileInputStream in = null;
    		try {
    			in = new FileInputStream("example.txt");
    			Person p = Person.parseFrom(in);
    			System.out.println("person2:" + p);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}finally{
    			try {
    				in.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    		
    	}
    }
    

      

  • 相关阅读:
    2 多线程的优点
    1 并发模型
    转:Webpack 指南(整理 草稿)
    深入理解JavaScript运行机制
    使用js-xlsx库,前端读取Excel报表文件
    深入理解定时器系列——被誉为神器的requestAnimationFrame
    前端资源大全汇总
    iPhone/iPad/Android UI尺寸规范 UI尺寸规范,UI图标尺寸,UI界面尺寸,iPhone6尺寸,iPhone6 Plus尺寸,安卓尺寸,iOS尺寸
    浅析渲染性能(转)
    Nodejs reactjs服务端渲染优化SEO
  • 原文地址:https://www.cnblogs.com/zhengqun/p/4922783.html
Copyright © 2011-2022 走看看