protocolbuffer java_Protocol Buffer技术详解(Java实例)

1 //用于修改LogonReqMessage消息字段的辅助Builder接口。2 //该接口会为消息中的每个字段均提供getter和setter方法。

3 public interfaceLogonReqMessageOrBuilder4 extendscom.google.protobuf.MessageLiteOrBuilder {5

6 //required int64 acctID = 1;

7 booleanhasAcctID();8 longgetAcctID();9

10 //required string passwd = 2;

11 booleanhasPasswd();12 String getPasswd();13 }14 //该类为final类,即不可以在被子类化了。这一点在Protocol Buffer的官方文档中给予了明确15 //的说明,因为子类化将会破坏序列化和反序列化的过程。

16 public static final class LogonReqMessage extends

17 com.google.protobuf.GeneratedMessageLite18 implementsLogonReqMessageOrBuilder {19

20 //Use LogonReqMessage.newBuilder() to construct.21 //由于所有构造函数均为私有方法,由此可见,我们不能直接new LogonReqMessage的对象22 //实例,而是只能通过与其对应Builder来构造,或是直接通过反序列化的方式生成。

23 privateLogonReqMessage(Builder builder) {24 super(builder);25 }26 //该静态方法为该类Builder接口的工厂方法。返回的Builder实现类在完成各个字段的27 //初始化后,通过build()方法返回与其对应的消息实现类,即LogonReqMessage。

28 public static Builder newBuilder() { returnBuilder.create(); }29 //通过该类的对象获取与其对应的Builder类对象,一般用于通过Builder类完成消息字段的修改。

30 public Builder toBuilder() { return newBuilder(this); }31

32 private LogonReqMessage(booleannoInit) {}33 //判断当前对象的所有字段是否都已经被初始化。

34 public final booleanisInitialized() {35 ... ...36 }37 //获取已经被初始化后的对象序列化时所占用的字节空间。

38 public intgetSerializedSize() {39 ... ...40 }41 //从内存中饭序列化LogonReqMessage对象。42 //Protocol Buffer中还提供其他一些接口方法,用于从不同的数据源反序列化对象。

43 public static com.lsk.lyphone.LYPhoneMessage.LogonReqMessage parseFrom(byte[] data)44 throwscom.google.protobuf.InvalidProtocolBufferException {45 returnnewBuilder().mergeFrom(data).buildParsed();46 }47 //功能和上一个函数相同,只是输入源改为InputStream接口。

48 public staticcom.lsk.lyphone.LYPhoneMessage.LogonReqMessage parseFrom(java.io.InputStream input)49 throwsjava.io.IOException {50 returnnewBuilder().mergeFrom(input).buildParsed();51 }52

53 //required int64 acctID = 1;54 //下面的静态变量对应于该字段在.proto中定义的标签号。该变量的命名规则为:字段(全部大写) + _FIELD_NUMBER。

55 public static final int ACCTID_FIELD_NUMBER = 1;56 public booleanhasAcctID() {57 return ((bitField0_ & 0x00000001) == 0x00000001);58 }59 public longgetAcctID() {60 returnacctID_;61 }62

63 //required string passwd = 2;

64 public static final int PASSWD_FIELD_NUMBER = 2;65 public booleanhasPasswd() {66 return ((bitField0_ & 0x00000002) == 0x00000002);67 }68 publicString getPasswd() {69 ... ...70 }71 //每一个Message类都会包含一个静态内部类,即与之对应的Builder类。上面代码中所涉及的Builder类均为该内部类。

72 public static final class Builder extends

73 com.google.protobuf.GeneratedMessageLite.Builder<

74 com.lsk.lyphone.LYPhoneMessage.LogonReqMessage, Builder>

75 implementscom.lsk.lyphone.LYPhoneMessage.LogonReqMessageOrBuilder {76 //清空当前对象中的所有设置。调用该函数之后,本例中的hasAcctID和hasPasswd都会返回false。

77 publicBuilder clear() {78 super.clear();79 acctID_ = 0L;80 bitField0_ = (bitField0_ & ~0x00000001);81 passwd_ = "";82 bitField0_ = (bitField0_ & ~0x00000002);83 return this;84 }85 //克隆出一个Builder对象。

86 publicBuilder clone() {87 returncreate().mergeFrom(buildPartial());88 }89 publiccom.lsk.lyphone.LYPhoneMessage.LogonReqMessage build() {90 com.lsk.lyphone.LYPhoneMessage.LogonReqMessage result =buildPartial();91 if (!result.isInitialized()) {92 thrownewUninitializedMessageException(result);93 }94 returnresult;95 }96 //Builder类中修改外部消息类的方法。97 //required int64 acctID = 1;

98 public booleanhasAcctID() {99 return ((bitField0_ & 0x00000001) == 0x00000001);100 }101 public longgetAcctID() {102 returnacctID_;103 }104 //设置AcctID字段,该函数调用后hasAcctID函数将返回true。105 //这里之所以让返回值为Builder对象,就是可以让调用者在一条代码中方便的连续修改多个字段,106 //如:myMessage.setAcctID(100).setPasswd("MyName");

107 public Builder setAcctID(longvalue) {108 bitField0_ |= 0x00000001;109 acctID_ =value;110 return this;111 }112 //清空AcctID字段,该函数调用后hasAcctID函数返回false。113 //这里之所以让返回值为Builder对象,就是可以让调用者在一条代码中方便的连续清空多个字段,114 //如:myMessage.clearAcctID().clearPasswd();

115 publicBuilder clearAcctID() {116 bitField0_ = (bitField0_ & ~0x00000001);117 acctID_ = 0L;118 return this;119 }120

121 //required string passwd = 2;

122 public booleanhasPasswd() {123 return ((bitField0_ & 0x00000002) == 0x00000002);124 }125 publicString getPasswd() {126 ... ...127 }128 publicBuilder setPasswd(String value) {129 ... ...130 }131 publicBuilder clearPasswd() {132 bitField0_ = (bitField0_ & ~0x00000002);133 passwd_ =getDefaultInstance().getPasswd();134 return this;135 }136 voidsetPasswd(com.google.protobuf.ByteString value) {137 bitField0_ |= 0x00000002;138 passwd_ =value;139 }140 }141 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值