ProtoBuf的java使用

简介:
碰巧用到Proto,算是笔记吧算是笔记吧,
   windows :
  1,两个文件:proto.exe,  protobuf-java-2.4.1.jar
  2,建立一个工程TestPb,在下面建立一个proto文件件,用来存放【。proto】文件
  3,将proto,exe放在工程下,
  4,建立一个msg.proto文件:
option java_package = "com.protobuftest.protobuf";
option java_outer_classname = "PersonProbuf";
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phone = 4;
message CountryInfo {
required string name = 1;
required string code = 2;
optional int32 number = 3;
}
}
message AddressBook {
repeated Person person = 1;
}
  5,生成  java 文件:在proto.exe目录下:protoc  --java_out=./src   ./proto/msg.proto
6,copy个测试示例了
  新建一个文件TestPb.java
***********************************************************
package com.protobuftest.protobuf;
import java.util.List;
import com.google.protobuf.InvalidProtocolBufferException;
import com.protobuftest.protobuf.PersonProbuf;
import com.protobuftest.protobuf.PersonProbuf.Person;
import com.protobuftest.protobuf.PersonProbuf.Person.PhoneNumber;
public class TestPb {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
PersonProbuf.Person.Builder builder = PersonProbuf.Person.newBuilder();
builder.setEmail("kkk@email.com");
builder.setId(1);
builder.setName("TestName");
builder.addPhone(PersonProbuf.Person.PhoneNumber.newBuilder().setNumber("131111111").setType(PersonProbuf.Person.PhoneType.MOBILE));
builder.addPhone(PersonProbuf.Person.PhoneNumber.newBuilder().setNumber("011111").setType(PersonProbuf.Person.PhoneType.HOME));
Person person = builder.build();
byte[] buf = person.toByteArray();
try {
Person person2 = PersonProbuf.Person.parseFrom(buf);
System.out.println(person2.getName() + ", " + person2.getEmail());
List<PhoneNumber> lstPhones = person2.getPhoneList();
for (PhoneNumber phoneNumber : lstPhones) {
System.out.println(phoneNumber.getNumber());
}
} catch (InvalidProtocolBufferException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(buf);
}
}
  ***********************************************
  *******************************
  生成java文件:PersonProbuf.java
  *******************************
  工程文件结构:

最新内容请见作者的GitHub页:http://qaseven.github.io/
相关文章
idea实现protobuf的.proto文件编译成.java文件教程
1..proto文件语法高亮显示1.1 打开idea的插件列表1.2 下载protobuf辅助插件1.3 安装好后重启idea 在项目中新增配置生成环境 1.6.1
12401 0
|
3月前
|
XML JSON Java
java项目中使用protobuf扫盲笔记
最近公司 Java 项目中有用到 protobuf,查了些资料还是一脸迷茫。
51 1
|
6月前
|
XML Java 编译器
【Protobuf】Protobuf快速使用 Java版、Python版
 Protocol Buffers(简称为ProtoBuf)是一种用于序列化、结构化数据的语言无关、平台无关、可扩展的机制。它由Google开发并于2008年开源发布。
103 0
|
10月前
|
XML 存储 JSON
protobuf在java, Android下的使用总结
protobuf在java, Android下的使用总结
|
11月前
|
Java 编译器 数据格式
Protobuf:一种轻量级、高效的数据交换格式,附Java与Python数据交换示例
Protobuf:一种轻量级、高效的数据交换格式,附Java与Python数据交换示例
198 0
|
存储 JSON 前端开发
protobuf太好用,java之父叫我改用grpc
在一般项目架构中,前后端交互使用Json格式,后端服务间交互使用Protobuf格式。这样的原因是:
|
Dubbo 算法 安全
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(二)
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(二)
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(二)
|
SQL 存储 Java
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(一)
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(一)
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(一)
|
XML JSON Java
java序列化机制之protobuf(快速高效跨语言)
我们之前曾讲过java自带的一种序列化机制,但是这种机制效率太低,有很多缺点。因此也涌现出了很多优秀的系列化框架,比如说protobuf、protostuff、thrift、hession、kryo、avro、fst、msgpack等等。这篇文章我们就看一下第一个序列化框架protobuf,给出一个简单案例,看看其是如何实现的。 注:若你对序列化概念和基本使用还有疑惑,可以翻看我之前的文章,或者百度一些基本概念和作用。
759 0
java序列化机制之protobuf(快速高效跨语言)
|
XML JSON Java
在java程序中使用protobuf
在java程序中使用protobuf