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 }