|
1. 定义协议
.proto代码
package xmty;
option java_package = "comcom.xmty.java"; //定义包
option java_outer_classname = "TestTest"; //定义类名
message People{ //结构化数据
required string name = 1;
repeated string list = 2;
}
定义好.proto文件后,使用对应版本的
protoc.exe在dos下生成java文件
protoc.exe --java_out=./ protocname.proto
然后,将生成的文件引入到JAVA项目中。
调用方法如下:
System.out.println("-----------------====");
People.Builder people = People.newBuilder();
people.setName("zms");
for (int i = 0; i < 10; i++) {
people.addList("list"+i);
}
System.out.println(People.type.MALE.getNumber()+"_-------------");
People p = people.build();
System.out.println(people);
PrintWriter os = resp.getWriter();
resp.setContentType("application/octet-stream");
String base64Result = Base64.encodeBytes(p.toByteArray());
System.out.println(base64Result);
os.write(base64Result);
os.close();
页面的用法:
<script type="text/javascript" src="jquery-1.6.4.js"></script>
<script type="text/javascript" src="protobuf.js"></script>
<script type="text/javascript" src="pbj.js"></script>
<script type="text/javascript" src="people.proto.js"></script>
<script type="text/javascript">
$(function(){
$.get("test.do",function(data){
var s = new xmty.People();
$("#111").append(data + "<br/>----------------<br />");
s.ParseFromStream(new PROTO.Base64Stream(data));
$("#111").append(s + "<br />------------------<br />");
for(var i=0;i<s.list.length;i++){
var l = s.list[i];
$("#111").append(l + "------------------<br />");
}
//$("#111").append(s.name + "<br />------------------");
});
});
</script>
要在页面使中,则需要,构造一个对应的js文件。
要对应.proto文件中的代码。
people.proto.js代码
if (typeof(xmty)=="undefined") {xmty = {};}
xmty.People = PROTO.Message("xmty.People",{
name: {
options: {},
multiplicity: PROTO.required,
type: function(){return PROTO.string;},
id: 1
},
list: {
options:{},
multiplicity: PROTO.repeated,
type: function(){return PROTO.string;},
id: 2
}
});
js.zip(pbj.js和protobuf.js)文件以及protobuf-java-2.1.0.jar将会评论区给出下载链接
原文连接:http://zms198983.iteye.com/blog/1544600 |