(一)Java使用Protobuf

学习使用Protobuf,创建java文件

windows :

步骤一:两个文件:proto.exe,  protobuf-Java-2.4.1.jar

步骤二:建立一个工程CreateProtoBuf,在下面建立一个proto文件件,用来存放【proto】文件

步骤三:将proto,exe放在工程下,

步骤四:建立一个msg.proto文件:

 1 option java_package = "com.protobuftest.protobuf";
 2 option java_outer_classname = "PersonProbuf";
 3
 4 message Person
 5 {
 6   required string name = 1;
 7   required int32 id = 2;
 8   optional string email = 3;
 9
10   enum PhoneType
11   {
12     MOBILE = 0;
13     HOME = 1;
14     WORK = 2;
15   }
16
17   message PhoneNumber
18   {
19     required string number = 1;
20     optional PhoneType type = 2 [default = HOME];
21   }
22
23   repeated PhoneNumber phone = 4;
24
25   message CountryInfo
26   {
27           required string name = 1;
28           required string code = 2;
29           optional int32 number = 3;
30   }
31 }
32
33 message AddressBook
34  {
35   repeated Person person = 1;
36 } 

步骤五:生成 java文件:在proto.exe目录下:protoc  --java_out=./src   ./proto/msg.proto

步骤六:测试实例

 1 package com.protobuftest.protobuf;
 2
 3 import java.util.List;
 4
 5 import com.google.protobuf.InvalidProtocolBufferException;
 6 import com.protobuftest.protobuf.PersonProbuf;
 7 import com.protobuftest.protobuf.PersonProbuf.Person;
 8 import com.protobuftest.protobuf.PersonProbuf.Person.PhoneNumber;
 9
10 public class Test
11 {
12     /**
13      * @param args
14      */
15     public static void main(String[] args)
16     {
17         PersonProbuf.Person.Builder builder = PersonProbuf.Person.newBuilder();
18         builder.setEmail("[email protected]");
19         builder.setId(1);
20         builder.setName("筱灬湘子");
21         builder.addPhone(PersonProbuf.Person.PhoneNumber.newBuilder().setNumber("1001").setType(PersonProbuf.Person.PhoneType.MOBILE));
22         builder.addPhone(PersonProbuf.Person.PhoneNumber.newBuilder().setNumber("1002").setType(PersonProbuf.Person.PhoneType.HOME));
23
24         Person person = builder.build();
25         byte[] buf = person.toByteArray();
26
27         try
28         {
29             Person person2 = PersonProbuf.Person.parseFrom(buf);
30
31             System.out.println(person2.getName() + ", " + person2.getEmail());
32
33             List<PhoneNumber> lstPhones = person2.getPhoneList();
34
35             for (PhoneNumber phoneNumber : lstPhones)
36             {
37                 System.out.println(phoneNumber.getNumber());
38             }
39         }
40         catch (InvalidProtocolBufferException e)
41         {
42             e.printStackTrace();
43         }
44
45         System.out.println(buf);
46     }
47 }

工程目录如下:

时间: 2024-10-12 19:29:41

(一)Java使用Protobuf的相关文章

Unity3D &amp; Java 基于 Protobuf 通信实现

Unity3D & Java 基于 Protobuf 通信实现 最近研究Unity3D,同时需要给游戏制定一套通信协议.因为本人是后端出生,对C#的 Socket相关通信框架不太熟悉,经过几天的学习,终于搞定了.在这里公布出来,大家可以共同学习,少走弯路. 本文重点:演示怎么解析和发送协议. 技术选型 服务端1 Java7 netty 4 客户端2 C# SuperSocket.ClientEngine https://clientengine.codeplex.com/ 它是从SuperSoc

[z]c++ 和 java 利用protobuf 通讯

[z]http://andinker.iteye.com/blog/1979428  java端的具体步骤如下: 1.首先下载 下载protobuf 编译工具   http://code.google.com/p/protobuf/downloads/detail?name=protobuf-2.4.1.zip&can=2&q= 2.书写protobuf文件 Java代码   package tutorial; //  商城购买 U_C_SHOP_BUY = 0x005A message 

记录:Protocol&#160;Buffers(protobuf)在Java开发中使用

数据交换的方式很多比如:XML,JSON,Protobuf.虽然protobuf很流行,并且系出名门,可是没怎么用过.通过阅读google developers里关于protocal-buffers的内容基本可以使用它了.如果你访问该链接https://developers.google.com/protocol-buffers/ 失败的话,肯能需要VPN服务. 语言手册:https://developers.google.com/protocol-buffers/docs/proto Prot

基于networkcomms V3通信框架的c#服务器与java客户端进行通信之Protobuf探讨

在上一篇 基于networkcomms V3通信框架的c#服务器与java客户端进行通信探讨  中探讨了在C#端与Java端通信中传递字符,有朋友提到如果传递int类型的整数,会出现编码的问题. 到网上找到了一篇文章< 使用protobuf进行C#与Java通信 >进行学习 ,使用protobuf进行编码,传递数据,好像这样可以避免编码的问题. (虽然编码问题解决了,但是粘包问题并没有解决,有经验的朋友介绍下怎样解决粘包的问题) 服务器端基于networkcomms V3 C#通信框架. ne

C#下使用protobuf(Google Protocol Buffers)

Protobuf是google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传统的XML表示高效短小得多.除了比Json.XML有速度上的优势和使用上的方便外,protocolbuf还可以做到向前兼容和向后兼容. protobuf 虽然只支持JAVA.C++和Pyton,但protobuf社区的protobuf.net组件让protobuf可以支持更多的语言,其中就包括了C#. protobuf协议 定义protobuf协议必须创建一个以.p

protobuf使用简介

官网:https://github.com/google/protobuf 环境:windows,java 1. protobuf概述protobuf是Google开发一种数据描述格式,能够将结构化数据序列化,可用于数据存储,通信协议等方面.protobuf是以二进制来存储数据的.相对于JSON和XML具有以下优点:- 简洁- 体积小:消息大小只需要XML的1/10 ~ 1/3- 速度快:解析速度比XML快20 ~ 100倍- 使用Protobuf的编译器,可以生成更容易在编程中使用的数据访问代

Google Protobuf Reader - Read Data

新项目需要 用 Java 读取 protobuf-net-data encode之后的数据,实在是个让人蛋疼的任务. protobuf-net-data 把 查询结果封装成 DataTable,用法自己参考原文. 这里说说我要做的事情 Understand Protobuf Encoding Decoding Java ResultSet Protobuf how to encoding: Google Doc a protocol buffer message is a series of k

转一篇Unity客户端与Java服务器的通信

转自:http://www.programering.com/a/MTNxYDMwATQ.html A few days ago a friend asked me about Unity3D inside Protobuf, was something to write this off until now, feel shy. In this paper, the test environment: System: WINDOWS 7 (third, 6), OS (fourth) X 10

Protobuf的简单介绍、使用和分析

Protobuf的简单介绍.使用和分析   一.protobuf是什么? protobuf(Google Protocol Buffers)是Google提供一个具有高效的协议数据交换格式工具库(类似Json),但相比于Json,Protobuf有更高的转化效率,时间效率和空间效率都是JSON的3-5倍.后面将会有简单的demo对于这两种格式的数据转化效率的对比.但这个库目前使用还不是太流行,据说谷歌内部很多产品都有使用. 二.protobuf有什么? Protobuf 提供了C++.java.