大家要先下载protobuffer,在这里:

https://code.google.com/p/protobuf/downloads/list

注意,需要下载两个,一个是complier,另外一个是source code (我下载的是2.5的版本);

讲complier对应的 protoc.exe 拷贝至 source code 对应的./protobuf-2.5.0/src目录下(mvn 编译需要);

cd 到 ./protobuf-2.5.0/java 目录, 执行 mvn clean package 命令打包;

到target目录获取生成的protobuf-java-2.5.0.jar包(Java代码对protobuf依赖的jar包);

person.proto文件

package com.shine.pb;
option java_package = "com.shine.pb.person";
option java_outer_classname = "MyPerson"; message Person {
required int32 id = 1;
required string name = 2;
optional string email = 3; enum PhoneType {
MOBILE = 0;
FIXED = 1;
} message PhoneInfo {
required string number = 1;
required PhoneType type = 2 [default=MOBILE];
} optional PhoneInfo phone = 4;
}

到protoc.exe所在目录,执行 protoc --java_out=./output/java ./messages/MyMessage.proto

可生成proto文件对应的Java类;

copy到自己eclipse对应src后;写main方法测试,代码如下:

package com.shine.pb.person;

import com.google.protobuf.InvalidProtocolBufferException;
import com.shine.pb.person.MyPerson.Person.PhoneType; public class Test { public static void main(String[] args) throws InvalidProtocolBufferException {
MyPerson.Person.Builder builder = MyPerson.Person.newBuilder();
builder.setId(1);
builder.setName("shine");
builder.setEmail("chenguodong@baidu.com");
MyPerson.Person.PhoneInfo.Builder phoneInfoBuilder = MyPerson.Person.PhoneInfo.newBuilder();
phoneInfoBuilder.setNumber("13899999999");
phoneInfoBuilder.setType(PhoneType.MOBILE);
builder.setPhone(phoneInfoBuilder.build()); MyPerson.Person shine = builder.build(); System.out.println(shine.getSerializedSize());
System.out.println(shine.getEmail());
System.out.println(shine.getName());
System.out.println(shine.getPhone().getNumber()); System.out.println("============================================="); byte[] data = shine.toByteArray();
builder = MyPerson.Person.newBuilder();
MyPerson.Person person = MyPerson.Person.parseFrom(data);
System.out.println(person.getSerializedSize());
System.out.println(person.getEmail());
System.out.println(person.getName());
System.out.println(person.getPhone().getNumber());
} }

最新文章

  1. 【JAVA并发编程实战】7、日志服务
  2. 01HTTP服务&AJAX编程
  3. ThinkPHP随笔
  4. Android 进阶Android 中的 IOC 框架 【ViewInject】 (上)
  5. linux c libcurl的简单使用(转)
  6. 一起Polyfill系列:让Date识别ISO 8601日期时间格式
  7. iOS-UITableCell详情
  8. java求最大公约数(分解质因数)
  9. 认识 Java Message Service
  10. java流程控制语句总结
  11. 基于Eclipse搭建hadoop开发环境
  12. sudo和su的区别
  13. 2018.09.26 洛谷P2464 [SDOI2008]郁闷的小J(map+vector)
  14. 绝对干货!初学者也能看懂的DPDK解析
  15. mysql 5.7.15 安装配置方法图文教程(转)
  16. Python 读取window下UTF-8-BOM 文件
  17. linux install tomcat
  18. 牛客网Java刷题知识点之OSI七层参考模型 和 TCP/IP五层参考模型
  19. BZOJ day1
  20. Mybatis学习笔记17 - sql标签和include标签

热门文章

  1. Magento创建configurable产品的要点
  2. 用正则表达式获取所有img标签
  3. C# Listview 第一列不能居中
  4. shell脚本 gawk语言 综采话单 对账 字段核对
  5. 一些判断Linux是否被黑的经验
  6. 1130-host ... is not allowed to connect to this MySql server 开放mysql远程连接 不使用localhost
  7. HTTP详解(2)
  8. python--函数--5
  9. Java泛型和链表
  10. 三星Mega 6.3(i9200)删除kingroot