posts - 165, comments - 198, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          google proto buffer 使用(java)

          Posted on 2008-09-08 17:01 G_G 閱讀(2761) 評論(0)  編輯  收藏 所屬分類: javaGeneral
          主頁:http://code.google.com/apis/protocolbuffers/docs/overview.html

          testProto.proto

          package?foo.bar;
          option?java_package?
          =?"com.proto";

          message?Person?{
          ??required?string?name?
          =?1;
          ??required?int32?id?
          =?2;
          ??optional?string?email?
          =?3;

          ??enum?PhoneType?{
          ????MOBILE?
          =?0;
          ????HOME?
          =?1;
          ????WORK?
          =?2;
          ??}

          ??message?PhoneNumber?{
          ????required?string?number?
          =?1;
          ????optional?PhoneType?type?
          =?2?[default?=?HOME];
          ??}

          ??repeated?PhoneNumber?phone?
          =?4;
          }

          運行命令
          '/home/kaiyi/proto/bin/protoc'? --java_out=src testProto.proto?


          使用(? 本類可用,builder 可改,開用但 list 刪除要使用比較郁悶的方法刪除!)
          package?unit;

          import?java.util.ArrayList;
          import?java.util.Arrays;
          import?java.util.Collections;
          import?java.util.List;

          import?com.google.protobuf.InvalidProtocolBufferException;
          import?com.proto.TestProto;
          import?com.proto.TestProto.Person;
          import?com.proto.TestProto.Person.PhoneNumber;

          public?class?Main?{
          ????
          public?static?void?main(String[]?args)?throws?InvalidProtocolBufferException?{
          ????????
          //空創建
          ????????Person.Builder?builder?=?Person.newBuilder();
          ????????builder.setName(
          "liukaiyi");
          ????????builder.setId(
          1);
          ????????
          ????????builder.setEmail(
          "email");
          ????????
          ????????PhoneNumber.Builder?pBuilder1?
          =?PhoneNumber.newBuilder();
          ????????pBuilder1.setNumber(
          "1");
          ????????pBuilder1.setType(TestProto.Person.PhoneType.MOBILE);
          ????????
          ????????
          ????????PhoneNumber.Builder?pBuilder2?
          =?PhoneNumber.newBuilder();
          ????????pBuilder2.setNumber(
          "2");
          ????????pBuilder2.setType(TestProto.Person.PhoneType.HOME);
          ????????
          ????????
          ????????
          ????????builder.addPhone(pBuilder1);
          ????????builder.addPhone(pBuilder2);
          ???????
          //此處為存儲到數據庫 或 傳輸!
          byte[]?data?=?builder.build().toByteArray()?;
          ????????
          for(byte?tb?:?data?)
          ????????????System.out.print(?(
          char)tb?);
          ????????
          ????????
          ????????
          //組建
          ????????Person?person?=?Person.parseFrom(data);
          ????????Person.Builder?builder2?
          =?Person.newBuilder(person);
          ????????builder2.setEmail(
          "test");
          ????????
          ????????PhoneNumber.Builder?pBuilder3?
          =?PhoneNumber.newBuilder();
          ????????pBuilder3.setNumber(
          "3");
          ????????pBuilder3.setType(TestProto.Person.PhoneType.HOME);
          ????????builder2.addPhone(pBuilder3);
          ???????
          //這 我最不明白的地方 , list 這 只能 使用 這種方法才可以刪除 list ????
          ??? ??? List list = new ArrayList(builder2.getPhoneList());
          ??? ??? List<PhoneNumber> ltmp =? builder2.getPhoneList() ;
          ??? ??? for(int i=0;i<list.size();i++ ){
          ??? ??? ??? if(ltmp.get(i).getNumber().equals("2"))
          ??? ??? ??? ??? list.remove( ltmp.get(i) ) ;
          ??? ??? }
          ??? ??? builder2.clearPhone().addAllPhone(list);

          ??????? builder2.clearEmail();

          ????????System.out.println(list.size());
          ????????System.out.println();
          ????????
          byte[]?data2?=?builder2.build().toByteArray()?;
          ????????
          for(byte?tb?:?data2?)
          ????????????System.out.print(?(
          char)tb?);
          ????????
          ????????
          ????????
          ????????
          ????}
          }



          主站蜘蛛池模板: 清苑县| 阿拉善左旗| 三台县| 盐城市| 元阳县| 崇信县| 崇文区| 巍山| 金寨县| 金坛市| 浦城县| 福州市| 株洲县| 灌云县| 沙洋县| 孟州市| 沛县| 金阳县| 赣榆县| 丹江口市| 甘孜| 平远县| 金昌市| 奎屯市| 南汇区| 平度市| 桃江县| 安顺市| 巫山县| 宣武区| 西城区| 高阳县| 盐山县| 西盟| 彭山县| 凭祥市| 广丰县| 德兴市| 迁安市| 景洪市| 靖安县|