在一次项目中,因笔者负责的java端应用需要与公司C++系统进行交互,公司选定Protocol Buffer方案,故简单的了解一下

有需要的可以看一下其他作者的文章,了解一下Protobuf:

http://www.cnblogs.com/stephen-liu74/archive/2013/01/02/2841485.html

http://blog.csdn.net/think_soft/article/details/8227363

====

http://www.cnblogs.com/voipman/p/5330118.html

一定要注意Java与C++两端使用的protobuf版本要保持一致,我使用的是protobuf-2.5.0版本

工具地址:

(1)protoc.exe工具:http://download.csdn.net/download/erli11/7408633

(2)jar包:

案例:http://download.csdn.net/download/erli11/7408809【注:protobuf-2.5.0\examples目录下有相应的.proto文件(addressbook.proto)及测试代码】

对上述案例中由addressbook.proto生成的Java代码的结构的分析如下图所示:

案例测试流程:

1.新建Java工程

2.添加.jar文件

3.新建.prroto文件,添加内容

4.通过命令行将.prroto文件编译为Java代码文件

5.编写测试代码

6.运行并查看结果

==============================================================

下面是摘取我项目中的部分内容形成的简单案例:

新建两个.proto文件(ebdTest.proto、sourceTest.proto),在ebdTest.proto中引入sourceTest.proto中定义的message:

(1)ebdTest.proto

 package com.comtom.proto;

 import "sourceTest.proto";

 option java_outer_classname = "EbdProto";

 message Ebd{
required Source source =1;
}

(2)sourceTest.proto

 package com.comtom.proto;

 message Source{
required string sourceType=1;
required string sourceName=2;
required string sourceID=3;
}

通过命令行编译上述两个.proto文件,生成.java文件,导入工程即可编码测试

(3)测试代码

 package com.comtom.test;

 import com.comtom.proto.SourceTest;
import com.comtom.proto.EbdProto.Ebd; public class ProtobufTest { public static void main(String[] args) { Ebd ebd=Ebd.newBuilder()
.setSource(SourceTest.Source.newBuilder().setSourceType("Test").setSourceName("YanYu").setSourceID("123").build())
.build();
System.out.println(ebd.getSource().getSourceID());
} }

两个系统间进行通信,其中一端充当客户端的角色,另一端充当服务器的角色。在我的项目中,Java端充当客户端,与C++服务器通信,使用Socket实现

参照了网上的几篇文章,需要的朋友看一下就能明白

http://wenku.baidu.com/link?url=_bBHBC2jggjaAuGlWxNljaMoutHD8gjILd63NutlIE-Qz5p7U5-MGiYEFHvcVLgzPYHxLyJuwk9DQ1XcoceT-BiKFBW6fJpIOVXkESrHeb_

此处就不再粘贴我的代码了


http://jm.taobao.org/2013/12/04/389/

http://blog.2baxb.me/archives/841

=========================================================

貌似在Eclipse中有个用于开发Protobuf的插件,没试过,不知道

http://www.360doc.com/content/14/0718/15/16044571_395291178.shtml

Java与C++进行系统间交互:Protocol Buffer的更多相关文章

  1. Mac 系统上安装Protocol buffer

    1. cd /Software/protobuf-2.5.0 2.sudo ./configure --prefix=$/Software/protobuf-2.5.0 3.sudo make 4.s ...

  2. Protocol Buffer使用

    Protocol Buffer使用简介 字数2630 阅读5067 评论1 喜欢12 我们项目中使用protocol buffer来进行服务器和客户端的消息交互,服务器使用C++,所以本文主要描述pr ...

  3. Google Protocol Buffer 的使用和原理[转]

    本文转自: http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构 ...

  4. Google Protocol Buffer 的使用和原理

    Google Protocol Buffer 的使用和原理 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式.它 ...

  5. 【Google Protocol Buffer】Google Protocol Buffer

    http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Google Protocol Buffer 的使用和原理 Protocol Buffers ...

  6. 转Google Protocol Buffer 的使用和原理

    Google Protocol Buffer 的使用和原理 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式.它 ...

  7. Google Protocol Buffer 的使用和原理(无论对存储还是数据交换,都是个挺有用的东西,有9张图做说明,十分清楚)

    感觉Google Protocol Buffer无论对存储还是数据交换,都是个挺有用的东西,这里记录下,以后应该用得着.下文转自: http://www.ibm.com/developerworks/ ...

  8. 【神经网络与深度学习】Google Protocol Buffer介绍

    简介 什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍: Google Protocol Buffer( 简称 Protobuf) 是 Googl ...

  9. (转)Google Protocol Buffer 的使用和原理

    转自:https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/index.html   简介 什么是 Google Protocol Buffer? ...

随机推荐

  1. umlの类图

    版权声明:本文为博主原创文章,若要转载请注明出处!^_^ https://blog.csdn.net/u010892841/article/details/24844825 类图class diagr ...

  2. PHP处理数组和XML之间的互相转换

    PHP将数组转换成XML PHP可以将数组转换成xml格式,简单的办法是遍历数组,然后将数组的key/value转换成xml节点,再直接echo输出了,如: function arrayToXml($ ...

  3. 【洛谷P1886】滑动窗口

    滑动窗口 [题目描述] 有N个数字,以及一个大小为k的窗口.现在这个窗口从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 思路: k<=N<=1000000,暴 ...

  4. javascript ActiveXObject FileSystemObject 对象,创建、复制、删除、读取文件等

    Javascript是网页制作中离不开的脚本语言,依靠它,一个网页的内容才生动活泼.富有朝气.但也许你还没有发现并应用它的一些更高级的功能吧?比如,对文件和文件夹进行读.写和删除,就象在VB.VC等高 ...

  5. Centos安装VMware

    转载:http://www.mamicode.com/info-detail-2171464.html

  6. JavaScript函数-高阶函数

    JavaScript的函数其实都指向某个变量.既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数. function add(x,y,f) ...

  7. Restrramework源码(包含组件)分析

    1.总体流程分析 rest_framework/view.py 请求通过url分发,触发as_view方法,该方法在ViewSetMixin类下 点进去查看as_view源码说明,可以看到它在正常情况 ...

  8. ECMAScript 内置类型、对象和运算符

    原始值是以下内置类型 之一的成员:Undefined,Null,Boolean,Number,String: 对象是剩下的内置 类型 Object 的成员:函数是可调用对象 (callable obj ...

  9. Java虚拟机垃圾回收(二) :垃圾回收算法(转载)

    1.标记-清除算法 标记-清除(Mark-Sweep)算法是一种基础的收集算法. 1.算法思路 "标记-清除"算法,分为两个阶段: (A).标记 首先标记出所有需要回收的对象: 标 ...

  10. JS定时器和单线程异步特性

    首先要说的是,定时器相关的方法都是属于BOM方法,而定时器呢,它是用于在设定的时间执行一段代码,或者在给定的时间间隔内重复该代码.具体函数: setTimeout(callback, delay);/ ...