Java与C++进行系统间交互:Protocol Buffer
在一次项目中,因笔者负责的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的更多相关文章
- Mac 系统上安装Protocol buffer
1. cd /Software/protobuf-2.5.0 2.sudo ./configure --prefix=$/Software/protobuf-2.5.0 3.sudo make 4.s ...
- Protocol Buffer使用
Protocol Buffer使用简介 字数2630 阅读5067 评论1 喜欢12 我们项目中使用protocol buffer来进行服务器和客户端的消息交互,服务器使用C++,所以本文主要描述pr ...
- Google Protocol Buffer 的使用和原理[转]
本文转自: http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构 ...
- Google Protocol Buffer 的使用和原理
Google Protocol Buffer 的使用和原理 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式.它 ...
- 【Google Protocol Buffer】Google Protocol Buffer
http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Google Protocol Buffer 的使用和原理 Protocol Buffers ...
- 转Google Protocol Buffer 的使用和原理
Google Protocol Buffer 的使用和原理 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式.它 ...
- Google Protocol Buffer 的使用和原理(无论对存储还是数据交换,都是个挺有用的东西,有9张图做说明,十分清楚)
感觉Google Protocol Buffer无论对存储还是数据交换,都是个挺有用的东西,这里记录下,以后应该用得着.下文转自: http://www.ibm.com/developerworks/ ...
- 【神经网络与深度学习】Google Protocol Buffer介绍
简介 什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍: Google Protocol Buffer( 简称 Protobuf) 是 Googl ...
- (转)Google Protocol Buffer 的使用和原理
转自:https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/index.html 简介 什么是 Google Protocol Buffer? ...
随机推荐
- Uva 11419 我是SAM
题目链接:https://vjudge.net/problem/UVA-11419 题意:一个网格里面有一些目标,可以从某一行,某一列发射一发子弹,可以打穿: 求最少的子弹,和在哪里打? 分析: 听说 ...
- POJ 2155 Matrix【二维树状数组+YY(区间计数)】
题目链接:http://poj.org/problem?id=2155 Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissio ...
- doppia代码支持
stixels_t在stixel.hpp里,存储class stixel的vector
- Docker 常用指令
1.检查内核版本,必须是3.10及以上uname ‐r2.安装dockeryum install docker3.输入y确认安装4.启动docker[root@localhost ~]# system ...
- 【洛谷P2324】[SCOI2005]骑士精神
骑士精神 题目链接 #include<iostream> #include<cstdio> using namespace std; int t,MAXD,sx,sy; ][] ...
- 【洛谷P1886】滑动窗口
滑动窗口 [题目描述] 有N个数字,以及一个大小为k的窗口.现在这个窗口从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 思路: k<=N<=1000000,暴 ...
- python—迭代器
迭代器 这些可以直接作用于for循环的对象统称为可迭代对象:Iterable. 可以使用isinstance()判断一个对象是否是Iterable对象: >>> from colle ...
- Kinect骨架数据
- 关于改变placeholder的颜色
input::-webkit-input-placeholder{ color:red; } input::-moz-placeholder{ /* Mozilla Firefox 19+ */ co ...
- CTRL+F5 和F5 两种刷新有什么区别