在一次项目中,因笔者负责的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