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文件中的代码。
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 } });
需要的pbj.js与protobuf.js在附件的js.zip中