zoukankan      html  css  js  c++  java
  • ProtocBuffer安装

    学习protocol http://www.jianshu.com/p/fa126a8535a0

    mac安装protocbuff:

    下边总结一下安装流程:

    查看官方文档
    源码在 https://github.com/google/protobuf , 如果不想自己编译获得最新版本,则可以下载官方编译好的各个平台的,下载地址:https://github.com/google/protobuf/releases找到自己需要的版本,例如要装2.6.1的话下载protobuf-2.6.1.zip

    第一步:cd /Users/sddd/Downloads/protobuf-2.6.1

    第二步:运行 ./configure

    第三步:运行 make

    第四步:运行 make check

    第五步:运行 make install

    如何没有权限的话,在前边加上sudo

    到这里就可以安装成功了,具体集成到项目上可以查看转发的博客上

    在终端protoc --version

    使用Protoc

    一;定义数据结构

    编译一个proto文件:

    在mywork文件夹下新建PersonMsg.proto,内容如下:

    message Person {

    // ID(必需)
    required int32 id = 1;

    // 姓名(必需)
    required string name = 2;

    // email(可选)
    optional string email = 3;

    // 朋友(集合)
    repeated string friends = 4;
    }

    二  生成 .java文件

    在命令行首先   cd mywork (cd  进入要编译的文件夹)

    然后执行:      protoc --plugin=mywork PersonMsg.proto --java_out="./"

    则会在mywork文件夹下生成一个名为PersonMsg.java的文件(如果是c++的话cpp_out=  生成的则是。PersonMsg.h.cc文件)

    在Eclipse中创建一个项目,将java文件拷贝到项目中。项目中需要引入protobuf-java-2.5.0.jar包。如果是maven项目则加入:

    <dependency>  
        <groupId>com.google.protobuf</groupId>  
        <artifactId>protobuf-java</artifactId>  
        <version>2.5.0</version>  
    </dependency>  
    

     三  序列化

    四  反序列化  

    一般来说,序列化和反序列化是分开的。例如网络传输,由一方将数据序列化后发送给另一方来接收并解析,序列化发送和接收反序列化并不在一起。但是下面为了例子简单将二者写在同一程序中。

    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.util.List;
    
    public class Main {
    
    	public static void main(String[] args) throws IOException {
    		
    		// 按照定义的数据结构,创建一个Person
    		PersonMsg.Person.Builder personBuilder = PersonMsg.Person.newBuilder();
    		personBuilder.setId(1);
    		personBuilder.setName("叉叉哥");
    		personBuilder.setEmail("xxg@163.com");
    		personBuilder.addFriends("Friend A");
    		personBuilder.addFriends("Friend B");
    		PersonMsg.Person xxg = personBuilder.build();
    		
    		// 将数据写到输出流,如网络输出流,这里就用ByteArrayOutputStream来代替
    		ByteArrayOutputStream output = new ByteArrayOutputStream();
    		xxg.writeTo(output);
    		
    		// -------------- 分割线:上面是发送方,将数据序列化后发送 ---------------
    		
    		byte[] byteArray = output.toByteArray();
    		
    		// -------------- 分割线:下面是接收方,将数据接收后反序列化 ---------------
    		
    		// 接收到流并读取,如网络输入流,这里用ByteArrayInputStream来代替
    		ByteArrayInputStream input = new ByteArrayInputStream(byteArray);
    		
    		// 反序列化
    		PersonMsg.Person xxg2 = PersonMsg.Person.parseFrom(input);
    		System.out.println("ID:" + xxg2.getId());
    		System.out.println("name:" + xxg2.getName());
    		System.out.println("email:" + xxg2.getEmail());
    		System.out.println("friend:");
    		List<String> friends = xxg2.getFriendsList();
    		for(String friend : friends) {
    			System.out.println(friend);
    		}
    	}
    
    }
    
  • 相关阅读:
    蓝桥杯 小朋友排队
    uestc 方老师和缘分
    uestc 方老师抢银行
    Tarjan 求强连通分量模板
    树边,前向边,后向边,横叉边
    hihocoder 第三十六周 二分·二分查找
    hihocoder 第三十四周 二分图三·二分图最小点覆盖和最大独立集
    CF 两题
    hihocoder 第三十三周 二分图一•二分图判定
    hdu 4430 Yukari's Birthday
  • 原文地址:https://www.cnblogs.com/wangleBlogs/p/7718241.html
Copyright © 2011-2022 走看看