Java与C++进行系统间交互:Protocol Buffer
在一次項(xiàng)目中,因筆者負(fù)責(zé)的java端應(yīng)用需要與公司C++系統(tǒng)進(jìn)行交互,公司選定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目錄下有相應(yīng)的.proto文件(addressbook.proto)及測(cè)試代碼】
對(duì)上述案例中由addressbook.proto生成的Java代碼的結(jié)構(gòu)的分析如下圖所示:
?
?
案例測(cè)試流程:
1.新建Java工程
2.添加.jar文件
3.新建.prroto文件,添加內(nèi)容
4.通過命令行將.prroto文件編譯為Java代碼文件
5.編寫測(cè)試代碼
6.運(yùn)行并查看結(jié)果
?
==============================================================
?
下面是摘取我項(xiàng)目中的部分內(nèi)容形成的簡單案例:
新建兩個(gè).proto文件(ebdTest.proto、sourceTest.proto),在ebdTest.proto中引入sourceTest.proto中定義的message:
(1)ebdTest.proto
1 package com.comtom.proto; 2 3 import "sourceTest.proto"; 4 5 option java_outer_classname = "EbdProto"; 6 7 message Ebd{ 8 required Source source =1; 9 }(2)sourceTest.proto
1 package com.comtom.proto; 2 3 message Source{ 4 required string sourceType=1; 5 required string sourceName=2; 6 required string sourceID=3; 7 }?通過命令行編譯上述兩個(gè).proto文件,生成.java文件,導(dǎo)入工程即可編碼測(cè)試
?
(3)測(cè)試代碼
1 package com.comtom.test; 2 3 import com.comtom.proto.SourceTest; 4 import com.comtom.proto.EbdProto.Ebd; 5 6 public class ProtobufTest { 7 8 public static void main(String[] args) { 9 10 Ebd ebd=Ebd.newBuilder() 11 .setSource(SourceTest.Source.newBuilder().setSourceType("Test").setSourceName("YanYu").setSourceID("123").build()) 12 .build(); 13 System.out.println(ebd.getSource().getSourceID()); 14 } 15 16 }?
兩個(gè)系統(tǒng)間進(jìn)行通信,其中一端充當(dāng)客戶端的角色,另一端充當(dāng)服務(wù)器的角色。在我的項(xiàng)目中,Java端充當(dāng)客戶端,與C++服務(wù)器通信,使用Socket實(shí)現(xiàn)
?
參照了網(wǎng)上的幾篇文章,需要的朋友看一下就能明白
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中有個(gè)用于開發(fā)Protobuf的插件,沒試過,不知道
http://www.360doc.com/content/14/0718/15/16044571_395291178.shtml?
轉(zhuǎn)載于:https://www.cnblogs.com/studyLog-share/p/4596735.html
總結(jié)
以上是生活随笔為你收集整理的Java与C++进行系统间交互:Protocol Buffer的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 笔记-Microsoft SQL Ser
- 下一篇: 引用和指针的比较