7.2 .Netty初认识--编解码-protobuf序列化
先安装protobuf
编写 SubscribeReq.proto
package netty;
option java_package = "club.wujingjian.com.wujingjian.netty.serial.java.vo2";
option java_outer_classname = "SubscribeReqProto";
message SubscribeReq {
required int32 subReqID = 1;;
required string userName = 2;
required string productName = 3;
required string address = 4;
}
编写: SubscribeResp.proto
package netty;
option java_package = "club.wujingjian.com.wujingjian.netty.serial.java.vo2";
option java_outer_classname = "SubscribeRespProto";
message SubscribeResp {
required int32 subReqID = 1;;
required int32 respCode = 2;
required string desc = 3;
}
调用protoc 命令将.proto文件生成对应的Java类
protoc --java_out=. SubscribeReq.proto
protoc --java_out=. SubscribeResp.proto
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: SubscribeReq.proto
package club.wujingjian.com.wujingjian.netty.serial.protobuf.vo2;
public final class SubscribeReqProto {
private SubscribeReqProto() {}
public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistryLite registry) {
}
public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistry registry) {
registerAllExtensions(
(com.google.protobuf.ExtensionRegistryLite) registry);
}
public interface SubscribeReqOrBuilder extends
// @@protoc_insertion_point(interface_extends:netty.SubscribeReq)
com.google.protobuf.MessageOrBuilder {
/**
* <code>required int32 subReqID = 1;</code>
* @return Whether the subReqID field is set.
*/
boolean hasSubReqID();
/**
* <code>required int32 subReqID = 1;</code>
* @return The subReqID.
*/
int getSubReqID();
/**
* <code>required string userName = 2;</code>
* @return Whether the userName field is set.
*/
boolean hasUserName();
/**
* <code>required string userName = 2;</code>
* @return The userName.
*/
String getUserName();
/**
* <code>required string userName = 2;</code>
* @return The bytes for userName.
*/
com.google.protobuf.ByteString
getUserNameBytes();
/**
* <code>required string productName = 3;</code>
* @return Whether the productName field is set.
*/
boolean hasProductName();
/**
* <code>required string productName = 3;</code>
* @return The productName.
*/
String getProductName();
/**
* <code>required string productName = 3;</code>
* @return The bytes for productName.
*/
com.google.protobuf.ByteString
getProductNameBytes();
/**
* <code>required string address = 4;</code>
* @return Whether the address field is set.
*/
boolean hasAddress();
/**
* <code>required string address = 4;</code>
* @return The address.
*/
String getAddress();
/**
* <code>required string address = 4;</code>
* @return The bytes for address.
*/
com.google.protobuf.ByteString
getAddressBytes();
}
/**
* Protobuf type {@code netty.SubscribeReq}
*/
public static final class SubscribeReq extends
com.google.protobuf.GeneratedMessageV3 implements
// @@protoc_insertion_point(message_implements:netty.SubscribeReq)
SubscribeReqOrBuilder {
private static final long serialVersionUID = 0L;
// Use SubscribeReq.newBuilder() to construct.
private SubscribeReq(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
super(builder);
}
private SubscribeReq() {
userName_ = "";
productName_ = "";
address_ = "";
}
@Override
@SuppressWarnings({"unused"})
protected Object newInstance(
UnusedPrivateParameter unused) {
return new SubscribeReq();
}
@Override
public final com.google.protobuf.UnknownFieldSet
getUnknownFields() {
return this.unknownFields;
}
private SubscribeReq(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
this();
if (extensionRegistry == null) {
throw new NullPointerException();
}
int mutable_bitField0_ = 0;
com.google.protobuf.UnknownFieldSet.Builder unknownFields =
com.google.protobuf.UnknownFieldSet.newBuilder();
try {
boolean done = false;
while (!done) {
int tag = input.readTag();
switch (tag) {
case 0:
done = true;
break;
case 8: {
bitField0_ |= 0x00000001;
subReqID_ = input.readInt32();
break;
}
case 18: {
com.google.protobuf.ByteString bs = input.readBytes();
bitField0_ |= 0x00000002;
userName_ = bs;
break;
}
case 26: {
com.google.protobuf.ByteString bs = input.readBytes();
bitField0_ |= 0x00000004;
productName_ = bs;
break;
}
case 34: {
com.google.protobuf.ByteString bs = input.readBytes();
bitField0_ |= 0x00000008;
address_ = bs;
break;
}
default: {
if (!parseUnknownField(
input, unknownFields, extensionRegistry, tag)) {
done = true;
}
break;
}
}
}
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
throw e.setUnfinishedMessage(this);
} catch (java.io.IOException e) {
throw new com.google.protobuf.InvalidProtocolBufferException(
e).setUnfinishedMessage(this);
} finally {
this.unknownFields = unknownFields.build();
makeExtensionsImmutable();
}
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return SubscribeReqProto.internal_static_netty_SubscribeReq_descriptor;
}
@Override
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internalGetFieldAccessorTable() {
return SubscribeReqProto.internal_static_netty_SubscribeReq_fieldAccessorTable
.ensureFieldAccessorsInitialized(
SubscribeReq.class, Builder.class);
}
private int bitField0_;
public static final int SUBREQID_FIELD_NUMBER = 1;
private int subReqID_;
/**
* <code>required int32 subReqID = 1;</code>
* @return Whether the subReqID field is set.
*/
public boolean hasSubReqID() {
return ((bitField0_ & 0x00000001) != 0);
}
/**
* <code>required int32 subReqID = 1;</code>
* @return The subReqID.
*/
public int getSubReqID() {
return subReqID_;
}
public static final int USERNAME_FIELD_NUMBER = 2;
private volatile Object userName_;
/**
* <code>required string userName = 2;</code>
* @return Whether the userName field is set.
*/
public boolean hasUserName() {
return ((bitField0_ & 0x00000002) != 0);
}
/**
* <code>required string userName = 2;</code>
* @return The userName.
*/
public String getUserName() {
Object ref = userName_;
if (ref instanceof String) {
return (String) ref;
} else {
com.google.protobuf.ByteString bs =
(com.google.protobuf.ByteString) ref;
String s = bs.toStringUtf8();
if (bs.isValidUtf8()) {
userName_ = s;
}
return s;
}
}
/**
* <code>required string userName = 2;</code>
* @return The bytes for userName.
*/
public com.google.protobuf.ByteString
getUserNameBytes() {
Object ref = userName_;
if (ref instanceof String) {
com.google.protobuf.ByteString b =
com.google.protobuf.ByteString.copyFromUtf8(
(String) ref);
userName_ = b;
return b;
} else {
return (com.google.protobuf.ByteString) ref;
}
}
public static final int PRODUCTNAME_FIELD_NUMBER = 3;
private volatile Object productName_;
/**
* <code>required string productName = 3;</code>
* @return Whether the productName field is set.
*/
public boolean hasProductName() {
return ((bitField0_ & 0x00000004) != 0);
}
/**
* <code>required string productName = 3;</code>
* @return The productName.
*/
public String getProductName() {
Object ref = productName_;
if (ref instanceof String) {
return (String) ref;
} else {
com.google.protobuf.ByteString bs =
(com.google.protobuf.ByteString) ref;
String s = bs.toStringUtf8();
if (bs.isValidUtf8()) {
productName_ = s;
}
return s;
}
}
/**
* <code>required string productName = 3;</code>
* @return The bytes for productName.
*/
public com.google.protobuf.ByteString
getProductNameBytes() {
Object ref = productName_;
if (ref instanceof String) {
com.google.protobuf.ByteString b =
com.google.protobuf.ByteString.copyFromUtf8(
(String) ref);
productName_ = b;
return b;
} else {
return (com.google.protobuf.ByteString) ref;
}
}
public static final int ADDRESS_FIELD_NUMBER = 4;
private volatile Object address_;
/**
* <code>required string address = 4;</code>
* @return Whether the address field is set.
*/
public boolean hasAddress() {
return ((bitField0_ & 0x00000008) != 0);
}
/**
* <code>required string address = 4;</code>
* @return The address.
*/
public String getAddress() {
Object ref = address_;
if (ref instanceof String) {
return (String) ref;
} else {
com.google.protobuf.ByteString bs =
(com.google.protobuf.ByteString) ref;
String s = bs.toStringUtf8();
if (bs.isValidUtf8()) {
address_ = s;
}
return s;
}
}
/**
* <code>required string address = 4;</code>
* @return The bytes for address.
*/
public com.google.protobuf.ByteString
getAddressBytes() {
Object ref = address_;
if (ref instanceof String) {
com.google.protobuf.ByteString b =
com.google.protobuf.ByteString.copyFromUtf8(
(String) ref);
address_ = b;
return b;
} else {
return (com.google.protobuf.ByteString) ref;
}
}
private byte memoizedIsInitialized = -1;
@Override
public final boolean isInitialized() {
byte isInitialized = memoizedIsInitialized;
if (isInitialized == 1) return true;
if (isInitialized == 0) return false;
if (!hasSubReqID()) {
memoizedIsInitialized = 0;
return false;
}
if (!hasUserName()) {
memoizedIsInitialized = 0;
return false;
}
if (!hasProductName()) {
memoizedIsInitialized = 0;
return false;
}
if (!hasAddress()) {
memoizedIsInitialized = 0;
return false;
}
memoizedIsInitialized = 1;
return true;
}
@Override
public void writeTo(com.google.protobuf.CodedOutputStream output)
throws java.io.IOException {
if (((bitField0_ & 0x00000001) != 0)) {
output.writeInt32(1, subReqID_);
}
if (((bitField0_ & 0x00000002) != 0)) {
com.google.protobuf.GeneratedMessageV3.writeString(output, 2, userName_);
}
if (((bitField0_ & 0x00000004) != 0)) {
com.google.protobuf.GeneratedMessageV3.writeString(output, 3, productName_);
}
if (((bitField0_ & 0x00000008) != 0)) {
com.google.protobuf.GeneratedMessageV3.writeString(output, 4, address_);
}
unknownFields.writeTo(output);
}
@Override
public int getSerializedSize() {
int size = memoizedSize;
if (size != -1) return size;
size = 0;
if (((bitField0_ & 0x00000001) != 0)) {
size += com.google.protobuf.CodedOutputStream
.computeInt32Size(1, subReqID_);
}
if (((bitField0_ & 0x00000002) != 0)) {
size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, userName_);
}
if (((bitField0_ & 0x00000004) != 0)) {
size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, productName_);
}
if (((bitField0_ & 0x00000008) != 0)) {
size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, address_);
}
size += unknownFields.getSerializedSize();
memoizedSize = size;
return size;
}
@Override
public boolean equals(final Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof SubscribeReq)) {
return super.equals(obj);
}
SubscribeReq other = (SubscribeReq) obj;
if (hasSubReqID() != other.hasSubReqID()) return false;
if (hasSubReqID()) {
if (getSubReqID()
!= other.getSubReqID()) return false;
}
if (hasUserName() != other.hasUserName()) return false;
if (hasUserName()) {
if (!getUserName()
.equals(other.getUserName())) return false;
}
if (hasProductName() != other.hasProductName()) return false;
if (hasProductName()) {
if (!getProductName()
.equals(other.getProductName())) return false;
}
if (hasAddress() != other.hasAddress()) return false;
if (hasAddress()) {
if (!getAddress()
.equals(other.getAddress())) return false;
}
if (!unknownFields.equals(other.unknownFields)) return false;
return true;
}
@Override
public int hashCode() {
if (memoizedHashCode != 0) {
return memoizedHashCode;
}
int hash = 41;
hash = (19 * hash) + getDescriptor().hashCode();
if (hasSubReqID()) {
hash = (37 * hash) + SUBREQID_FIELD_NUMBER;
hash = (53 * hash) + getSubReqID();
}
if (hasUserName()) {
hash = (37 * hash) + USERNAME_FIELD_NUMBER;
hash = (53 * hash) + getUserName().hashCode();
}
if (hasProductName()) {
hash = (37 * hash) + PRODUCTNAME_FIELD_NUMBER;
hash = (53 * hash) + getProductName().hashCode();
}
if (hasAddress()) {
hash = (37 * hash) + ADDRESS_FIELD_NUMBER;
hash = (53 * hash) + getAddress().hashCode();
}
hash = (29 * hash) + unknownFields.hashCode();
memoizedHashCode = hash;
return hash;
}
public static SubscribeReq parseFrom(
java.nio.ByteBuffer data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static SubscribeReq parseFrom(
java.nio.ByteBuffer data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static SubscribeReq parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static SubscribeReq parseFrom(
com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static SubscribeReq parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static SubscribeReq parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static SubscribeReq parseFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
public static SubscribeReq parseFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
public static SubscribeReq parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input);
}
public static SubscribeReq parseDelimitedFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
}
public static SubscribeReq parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
public static SubscribeReq parseFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
@Override
public Builder newBuilderForType() { return newBuilder(); }
public static Builder newBuilder() {
return DEFAULT_INSTANCE.toBuilder();
}
public static Builder newBuilder(SubscribeReq prototype) {
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
}
@Override
public Builder toBuilder() {
return this == DEFAULT_INSTANCE
? new Builder() : new Builder().mergeFrom(this);
}
@Override
protected Builder newBuilderForType(
com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
Builder builder = new Builder(parent);
return builder;
}
/**
* Protobuf type {@code netty.SubscribeReq}
*/
public static final class Builder extends
com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
// @@protoc_insertion_point(builder_implements:netty.SubscribeReq)
SubscribeReqOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return SubscribeReqProto.internal_static_netty_SubscribeReq_descriptor;
}
@Override
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internalGetFieldAccessorTable() {
return SubscribeReqProto.internal_static_netty_SubscribeReq_fieldAccessorTable
.ensureFieldAccessorsInitialized(
SubscribeReq.class, Builder.class);
}
// Construct using club.wujingjian.com.wujingjian.netty.serial.java.vo2.SubscribeReqProto.SubscribeReq.newBuilder()
private Builder() {
maybeForceBuilderInitialization();
}
private Builder(
com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
super(parent);
maybeForceBuilderInitialization();
}
private void maybeForceBuilderInitialization() {
if (com.google.protobuf.GeneratedMessageV3
.alwaysUseFieldBuilders) {
}
}
@Override
public Builder clear() {
super.clear();
subReqID_ = 0;
bitField0_ = (bitField0_ & ~0x00000001);
userName_ = "";
bitField0_ = (bitField0_ & ~0x00000002);
productName_ = "";
bitField0_ = (bitField0_ & ~0x00000004);
address_ = "";
bitField0_ = (bitField0_ & ~0x00000008);
return this;
}
@Override
public com.google.protobuf.Descriptors.Descriptor
getDescriptorForType() {
return SubscribeReqProto.internal_static_netty_SubscribeReq_descriptor;
}
@Override
public SubscribeReq getDefaultInstanceForType() {
return SubscribeReq.getDefaultInstance();
}
@Override
public SubscribeReq build() {
SubscribeReq result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
return result;
}
@Override
public SubscribeReq buildPartial() {
SubscribeReq result = new SubscribeReq(this);
int from_bitField0_ = bitField0_;
int to_bitField0_ = 0;
if (((from_bitField0_ & 0x00000001) != 0)) {
result.subReqID_ = subReqID_;
to_bitField0_ |= 0x00000001;
}
if (((from_bitField0_ & 0x00000002) != 0)) {
to_bitField0_ |= 0x00000002;
}
result.userName_ = userName_;
if (((from_bitField0_ & 0x00000004) != 0)) {
to_bitField0_ |= 0x00000004;
}
result.productName_ = productName_;
if (((from_bitField0_ & 0x00000008) != 0)) {
to_bitField0_ |= 0x00000008;
}
result.address_ = address_;
result.bitField0_ = to_bitField0_;
onBuilt();
return result;
}
@Override
public Builder clone() {
return super.clone();
}
@Override
public Builder setField(
com.google.protobuf.Descriptors.FieldDescriptor field,
Object value) {
return super.setField(field, value);
}
@Override
public Builder clearField(
com.google.protobuf.Descriptors.FieldDescriptor field) {
return super.clearField(field);
}
@Override
public Builder clearOneof(
com.google.protobuf.Descriptors.OneofDescriptor oneof) {
return super.clearOneof(oneof);
}
@Override
public Builder setRepeatedField(
com.google.protobuf.Descriptors.FieldDescriptor field,
int index, Object value) {
return super.setRepeatedField(field, index, value);
}
@Override
public Builder addRepeatedField(
com.google.protobuf.Descriptors.FieldDescriptor field,
Object value) {
return super.addRepeatedField(field, value);
}
@Override
public Builder mergeFrom(com.google.protobuf.Message other) {
if (other instanceof SubscribeReq) {
return mergeFrom((SubscribeReq)other);
} else {
super.mergeFrom(other);
return this;
}
}
public Builder mergeFrom(SubscribeReq other) {
if (other == SubscribeReq.getDefaultInstance()) return this;
if (other.hasSubReqID()) {
setSubReqID(other.getSubReqID());
}
if (other.hasUserName()) {
bitField0_ |= 0x00000002;
userName_ = other.userName_;
onChanged();
}
if (other.hasProductName()) {
bitField0_ |= 0x00000004;
productName_ = other.productName_;
onChanged();
}
if (other.hasAddress()) {
bitField0_ |= 0x00000008;
address_ = other.address_;
onChanged();
}
this.mergeUnknownFields(other.unknownFields);
onChanged();
return this;
}
@Override
public final boolean isInitialized() {
if (!hasSubReqID()) {
return false;
}
if (!hasUserName()) {
return false;
}
if (!hasProductName()) {
return false;
}
if (!hasAddress()) {
return false;
}
return true;
}
@Override
public Builder mergeFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
SubscribeReq parsedMessage = null;
try {
parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
parsedMessage = (SubscribeReq) e.getUnfinishedMessage();
throw e.unwrapIOException();
} finally {
if (parsedMessage != null) {
mergeFrom(parsedMessage);
}
}
return this;
}
private int bitField0_;
private int subReqID_ ;
/**
* <code>required int32 subReqID = 1;</code>
* @return Whether the subReqID field is set.
*/
public boolean hasSubReqID() {
return ((bitField0_ & 0x00000001) != 0);
}
/**
* <code>required int32 subReqID = 1;</code>
* @return The subReqID.
*/
public int getSubReqID() {
return subReqID_;
}
/**
* <code>required int32 subReqID = 1;</code>
* @param value The subReqID to set.
* @return This builder for chaining.
*/
public Builder setSubReqID(int value) {
bitField0_ |= 0x00000001;
subReqID_ = value;
onChanged();
return this;
}
/**
* <code>required int32 subReqID = 1;</code>
* @return This builder for chaining.
*/
public Builder clearSubReqID() {
bitField0_ = (bitField0_ & ~0x00000001);
subReqID_ = 0;
onChanged();
return this;
}
private Object userName_ = "";
/**
* <code>required string userName = 2;</code>
* @return Whether the userName field is set.
*/
public boolean hasUserName() {
return ((bitField0_ & 0x00000002) != 0);
}
/**
* <code>required string userName = 2;</code>
* @return The userName.
*/
public String getUserName() {
Object ref = userName_;
if (!(ref instanceof String)) {
com.google.protobuf.ByteString bs =
(com.google.protobuf.ByteString) ref;
String s = bs.toStringUtf8();
if (bs.isValidUtf8()) {
userName_ = s;
}
return s;
} else {
return (String) ref;
}
}
/**
* <code>required string userName = 2;</code>
* @return The bytes for userName.
*/
public com.google.protobuf.ByteString
getUserNameBytes() {
Object ref = userName_;
if (ref instanceof String) {
com.google.protobuf.ByteString b =
com.google.protobuf.ByteString.copyFromUtf8(
(String) ref);
userName_ = b;
return b;
} else {
return (com.google.protobuf.ByteString) ref;
}
}
/**
* <code>required string userName = 2;</code>
* @param value The userName to set.
* @return This builder for chaining.
*/
public Builder setUserName(
String value) {
if (value == null) {
throw new NullPointerException();
}
bitField0_ |= 0x00000002;
userName_ = value;
onChanged();
return this;
}
/**
* <code>required string userName = 2;</code>
* @return This builder for chaining.
*/
public Builder clearUserName() {
bitField0_ = (bitField0_ & ~0x00000002);
userName_ = getDefaultInstance().getUserName();
onChanged();
return this;
}
/**
* <code>required string userName = 2;</code>
* @param value The bytes for userName to set.
* @return This builder for chaining.
*/
public Builder setUserNameBytes(
com.google.protobuf.ByteString value) {
if (value == null) {
throw new NullPointerException();
}
bitField0_ |= 0x00000002;
userName_ = value;
onChanged();
return this;
}
private Object productName_ = "";
/**
* <code>required string productName = 3;</code>
* @return Whether the productName field is set.
*/
public boolean hasProductName() {
return ((bitField0_ & 0x00000004) != 0);
}
/**
* <code>required string productName = 3;</code>
* @return The productName.
*/
public String getProductName() {
Object ref = productName_;
if (!(ref instanceof String)) {
com.google.protobuf.ByteString bs =
(com.google.protobuf.ByteString) ref;
String s = bs.toStringUtf8();
if (bs.isValidUtf8()) {
productName_ = s;
}
return s;
} else {
return (String) ref;
}
}
/**
* <code>required string productName = 3;</code>
* @return The bytes for productName.
*/
public com.google.protobuf.ByteString
getProductNameBytes() {
Object ref = productName_;
if (ref instanceof String) {
com.google.protobuf.ByteString b =
com.google.protobuf.ByteString.copyFromUtf8(
(String) ref);
productName_ = b;
return b;
} else {
return (com.google.protobuf.ByteString) ref;
}
}
/**
* <code>required string productName = 3;</code>
* @param value The productName to set.
* @return This builder for chaining.
*/
public Builder setProductName(
String value) {
if (value == null) {
throw new NullPointerException();
}
bitField0_ |= 0x00000004;
productName_ = value;
onChanged();
return this;
}
/**
* <code>required string productName = 3;</code>
* @return This builder for chaining.
*/
public Builder clearProductName() {
bitField0_ = (bitField0_ & ~0x00000004);
productName_ = getDefaultInstance().getProductName();
onChanged();
return this;
}
/**
* <code>required string productName = 3;</code>
* @param value The bytes for productName to set.
* @return This builder for chaining.
*/
public Builder setProductNameBytes(
com.google.protobuf.ByteString value) {
if (value == null) {
throw new NullPointerException();
}
bitField0_ |= 0x00000004;
productName_ = value;
onChanged();
return this;
}
private Object address_ = "";
/**
* <code>required string address = 4;</code>
* @return Whether the address field is set.
*/
public boolean hasAddress() {
return ((bitField0_ & 0x00000008) != 0);
}
/**
* <code>required string address = 4;</code>
* @return The address.
*/
public String getAddress() {
Object ref = address_;
if (!(ref instanceof String)) {
com.google.protobuf.ByteString bs =
(com.google.protobuf.ByteString) ref;
String s = bs.toStringUtf8();
if (bs.isValidUtf8()) {
address_ = s;
}
return s;
} else {
return (String) ref;
}
}
/**
* <code>required string address = 4;</code>
* @return The bytes for address.
*/
public com.google.protobuf.ByteString
getAddressBytes() {
Object ref = address_;
if (ref instanceof String) {
com.google.protobuf.ByteString b =
com.google.protobuf.ByteString.copyFromUtf8(
(String) ref);
address_ = b;
return b;
} else {
return (com.google.protobuf.ByteString) ref;
}
}
/**
* <code>required string address = 4;</code>
* @param value The address to set.
* @return This builder for chaining.
*/
public Builder setAddress(
String value) {
if (value == null) {
throw new NullPointerException();
}
bitField0_ |= 0x00000008;
address_ = value;
onChanged();
return this;
}
/**
* <code>required string address = 4;</code>
* @return This builder for chaining.
*/
public Builder clearAddress() {
bitField0_ = (bitField0_ & ~0x00000008);
address_ = getDefaultInstance().getAddress();
onChanged();
return this;
}
/**
* <code>required string address = 4;</code>
* @param value The bytes for address to set.
* @return This builder for chaining.
*/
public Builder setAddressBytes(
com.google.protobuf.ByteString value) {
if (value == null) {
throw new NullPointerException();
}
bitField0_ |= 0x00000008;
address_ = value;
onChanged();
return this;
}
@Override
public final Builder setUnknownFields(
final com.google.protobuf.UnknownFieldSet unknownFields) {
return super.setUnknownFields(unknownFields);
}
@Override
public final Builder mergeUnknownFields(
final com.google.protobuf.UnknownFieldSet unknownFields) {
return super.mergeUnknownFields(unknownFields);
}
// @@protoc_insertion_point(builder_scope:netty.SubscribeReq)
}
// @@protoc_insertion_point(class_scope:netty.SubscribeReq)
private static final SubscribeReq DEFAULT_INSTANCE;
static {
DEFAULT_INSTANCE = new SubscribeReq();
}
public static SubscribeReq getDefaultInstance() {
return DEFAULT_INSTANCE;
}
@Deprecated public static final com.google.protobuf.Parser<SubscribeReq>
PARSER = new com.google.protobuf.AbstractParser<SubscribeReq>() {
@Override
public SubscribeReq parsePartialFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return new SubscribeReq(input, extensionRegistry);
}
};
public static com.google.protobuf.Parser<SubscribeReq> parser() {
return PARSER;
}
@Override
public com.google.protobuf.Parser<SubscribeReq> getParserForType() {
return PARSER;
}
@Override
public SubscribeReq getDefaultInstanceForType() {
return DEFAULT_INSTANCE;
}
}
private static final com.google.protobuf.Descriptors.Descriptor
internal_static_netty_SubscribeReq_descriptor;
private static final
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internal_static_netty_SubscribeReq_fieldAccessorTable;
public static com.google.protobuf.Descriptors.FileDescriptor
getDescriptor() {
return descriptor;
}
private static com.google.protobuf.Descriptors.FileDescriptor
descriptor;
static {
String[] descriptorData = {
"\n\022SubscribeReq.proto\022\005netty\"X\n\014Subscribe" +
"Req\022\020\n\010subReqID\030\001 \002(\005\022\020\n\010userName\030\002 \002(\t\022" +
"\023\n\013productName\030\003 \002(\t\022\017\n\007address\030\004 \002(\tBI\n" +
"4club.wujingjian.com.wujingjian.netty.se" +
"rial.java.vo2B\021SubscribeReqProto"
};
descriptor = com.google.protobuf.Descriptors.FileDescriptor
.internalBuildGeneratedFileFrom(descriptorData,
new com.google.protobuf.Descriptors.FileDescriptor[] {
});
internal_static_netty_SubscribeReq_descriptor =
getDescriptor().getMessageTypes().get(0);
internal_static_netty_SubscribeReq_fieldAccessorTable = new
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_netty_SubscribeReq_descriptor,
new String[] { "SubReqID", "UserName", "ProductName", "Address", });
}
// @@protoc_insertion_point(outer_class_scope)
}
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: SubscribeResp.proto
package club.wujingjian.com.wujingjian.netty.serial.protobuf.vo2;
public final class SubscribeRespProto {
private SubscribeRespProto() {}
public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistryLite registry) {
}
public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistry registry) {
registerAllExtensions(
(com.google.protobuf.ExtensionRegistryLite) registry);
}
public interface SubscribeRespOrBuilder extends
// @@protoc_insertion_point(interface_extends:netty.SubscribeResp)
com.google.protobuf.MessageOrBuilder {
/**
* <code>required int32 subReqID = 1;</code>
* @return Whether the subReqID field is set.
*/
boolean hasSubReqID();
/**
* <code>required int32 subReqID = 1;</code>
* @return The subReqID.
*/
int getSubReqID();
/**
* <code>required int32 respCode = 2;</code>
* @return Whether the respCode field is set.
*/
boolean hasRespCode();
/**
* <code>required int32 respCode = 2;</code>
* @return The respCode.
*/
int getRespCode();
/**
* <code>required string desc = 3;</code>
* @return Whether the desc field is set.
*/
boolean hasDesc();
/**
* <code>required string desc = 3;</code>
* @return The desc.
*/
String getDesc();
/**
* <code>required string desc = 3;</code>
* @return The bytes for desc.
*/
com.google.protobuf.ByteString
getDescBytes();
}
/**
* Protobuf type {@code netty.SubscribeResp}
*/
public static final class SubscribeResp extends
com.google.protobuf.GeneratedMessageV3 implements
// @@protoc_insertion_point(message_implements:netty.SubscribeResp)
SubscribeRespOrBuilder {
private static final long serialVersionUID = 0L;
// Use SubscribeResp.newBuilder() to construct.
private SubscribeResp(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
super(builder);
}
private SubscribeResp() {
desc_ = "";
}
@Override
@SuppressWarnings({"unused"})
protected Object newInstance(
UnusedPrivateParameter unused) {
return new SubscribeResp();
}
@Override
public final com.google.protobuf.UnknownFieldSet
getUnknownFields() {
return this.unknownFields;
}
private SubscribeResp(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
this();
if (extensionRegistry == null) {
throw new NullPointerException();
}
int mutable_bitField0_ = 0;
com.google.protobuf.UnknownFieldSet.Builder unknownFields =
com.google.protobuf.UnknownFieldSet.newBuilder();
try {
boolean done = false;
while (!done) {
int tag = input.readTag();
switch (tag) {
case 0:
done = true;
break;
case 8: {
bitField0_ |= 0x00000001;
subReqID_ = input.readInt32();
break;
}
case 16: {
bitField0_ |= 0x00000002;
respCode_ = input.readInt32();
break;
}
case 26: {
com.google.protobuf.ByteString bs = input.readBytes();
bitField0_ |= 0x00000004;
desc_ = bs;
break;
}
default: {
if (!parseUnknownField(
input, unknownFields, extensionRegistry, tag)) {
done = true;
}
break;
}
}
}
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
throw e.setUnfinishedMessage(this);
} catch (java.io.IOException e) {
throw new com.google.protobuf.InvalidProtocolBufferException(
e).setUnfinishedMessage(this);
} finally {
this.unknownFields = unknownFields.build();
makeExtensionsImmutable();
}
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return SubscribeRespProto.internal_static_netty_SubscribeResp_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
return SubscribeRespProto.internal_static_netty_SubscribeResp_fieldAccessorTable
.ensureFieldAccessorsInitialized(
SubscribeResp.class, Builder.class);
}
private int bitField0_;
public static final int SUBREQID_FIELD_NUMBER = 1;
private int subReqID_;
/**
* <code>required int32 subReqID = 1;</code>
* @return Whether the subReqID field is set.
*/
public boolean hasSubReqID() {
return ((bitField0_ & 0x00000001) != 0);
}
/**
* <code>required int32 subReqID = 1;</code>
* @return The subReqID.
*/
public int getSubReqID() {
return subReqID_;
}
public static final int RESPCODE_FIELD_NUMBER = 2;
private int respCode_;
/**
* <code>required int32 respCode = 2;</code>
* @return Whether the respCode field is set.
*/
public boolean hasRespCode() {
return ((bitField0_ & 0x00000002) != 0);
}
/**
* <code>required int32 respCode = 2;</code>
* @return The respCode.
*/
public int getRespCode() {
return respCode_;
}
public static final int DESC_FIELD_NUMBER = 3;
private volatile Object desc_;
/**
* <code>required string desc = 3;</code>
* @return Whether the desc field is set.
*/
public boolean hasDesc() {
return ((bitField0_ & 0x00000004) != 0);
}
/**
* <code>required string desc = 3;</code>
* @return The desc.
*/
public String getDesc() {
Object ref = desc_;
if (ref instanceof String) {
return (String) ref;
} else {
com.google.protobuf.ByteString bs =
(com.google.protobuf.ByteString) ref;
String s = bs.toStringUtf8();
if (bs.isValidUtf8()) {
desc_ = s;
}
return s;
}
}
/**
* <code>required string desc = 3;</code>
* @return The bytes for desc.
*/
public com.google.protobuf.ByteString
getDescBytes() {
Object ref = desc_;
if (ref instanceof String) {
com.google.protobuf.ByteString b =
com.google.protobuf.ByteString.copyFromUtf8(
(String) ref);
desc_ = b;
return b;
} else {
return (com.google.protobuf.ByteString) ref;
}
}
private byte memoizedIsInitialized = -1;
@Override
public final boolean isInitialized() {
byte isInitialized = memoizedIsInitialized;
if (isInitialized == 1) return true;
if (isInitialized == 0) return false;
if (!hasSubReqID()) {
memoizedIsInitialized = 0;
return false;
}
if (!hasRespCode()) {
memoizedIsInitialized = 0;
return false;
}
if (!hasDesc()) {
memoizedIsInitialized = 0;
return false;
}
memoizedIsInitialized = 1;
return true;
}
@Override
public void writeTo(com.google.protobuf.CodedOutputStream output)
throws java.io.IOException {
if (((bitField0_ & 0x00000001) != 0)) {
output.writeInt32(1, subReqID_);
}
if (((bitField0_ & 0x00000002) != 0)) {
output.writeInt32(2, respCode_);
}
if (((bitField0_ & 0x00000004) != 0)) {
com.google.protobuf.GeneratedMessageV3.writeString(output, 3, desc_);
}
unknownFields.writeTo(output);
}
@Override
public int getSerializedSize() {
int size = memoizedSize;
if (size != -1) return size;
size = 0;
if (((bitField0_ & 0x00000001) != 0)) {
size += com.google.protobuf.CodedOutputStream
.computeInt32Size(1, subReqID_);
}
if (((bitField0_ & 0x00000002) != 0)) {
size += com.google.protobuf.CodedOutputStream
.computeInt32Size(2, respCode_);
}
if (((bitField0_ & 0x00000004) != 0)) {
size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, desc_);
}
size += unknownFields.getSerializedSize();
memoizedSize = size;
return size;
}
@Override
public boolean equals(final Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof SubscribeResp)) {
return super.equals(obj);
}
SubscribeResp other = (SubscribeResp) obj;
if (hasSubReqID() != other.hasSubReqID()) return false;
if (hasSubReqID()) {
if (getSubReqID()
!= other.getSubReqID()) return false;
}
if (hasRespCode() != other.hasRespCode()) return false;
if (hasRespCode()) {
if (getRespCode()
!= other.getRespCode()) return false;
}
if (hasDesc() != other.hasDesc()) return false;
if (hasDesc()) {
if (!getDesc()
.equals(other.getDesc())) return false;
}
if (!unknownFields.equals(other.unknownFields)) return false;
return true;
}
@Override
public int hashCode() {
if (memoizedHashCode != 0) {
return memoizedHashCode;
}
int hash = 41;
hash = (19 * hash) + getDescriptor().hashCode();
if (hasSubReqID()) {
hash = (37 * hash) + SUBREQID_FIELD_NUMBER;
hash = (53 * hash) + getSubReqID();
}
if (hasRespCode()) {
hash = (37 * hash) + RESPCODE_FIELD_NUMBER;
hash = (53 * hash) + getRespCode();
}
if (hasDesc()) {
hash = (37 * hash) + DESC_FIELD_NUMBER;
hash = (53 * hash) + getDesc().hashCode();
}
hash = (29 * hash) + unknownFields.hashCode();
memoizedHashCode = hash;
return hash;
}
public static SubscribeResp parseFrom(
java.nio.ByteBuffer data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static SubscribeResp parseFrom(
java.nio.ByteBuffer data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static SubscribeResp parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static SubscribeResp parseFrom(
com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static SubscribeResp parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static SubscribeResp parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static SubscribeResp parseFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
public static SubscribeResp parseFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
public static SubscribeResp parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input);
}
public static SubscribeResp parseDelimitedFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
}
public static SubscribeResp parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
public static SubscribeResp parseFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
@Override
public Builder newBuilderForType() { return newBuilder(); }
public static Builder newBuilder() {
return DEFAULT_INSTANCE.toBuilder();
}
public static Builder newBuilder(SubscribeResp prototype) {
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
}
@Override
public Builder toBuilder() {
return this == DEFAULT_INSTANCE
? new Builder() : new Builder().mergeFrom(this);
}
@Override
protected Builder newBuilderForType(
BuilderParent parent) {
Builder builder = new Builder(parent);
return builder;
}
/**
* Protobuf type {@code netty.SubscribeResp}
*/
public static final class Builder extends
com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
// @@protoc_insertion_point(builder_implements:netty.SubscribeResp)
SubscribeRespOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return SubscribeRespProto.internal_static_netty_SubscribeResp_descriptor;
}
@Override
protected FieldAccessorTable
internalGetFieldAccessorTable() {
return SubscribeRespProto.internal_static_netty_SubscribeResp_fieldAccessorTable
.ensureFieldAccessorsInitialized(
SubscribeResp.class, Builder.class);
}
// Construct using club.wujingjian.com.wujingjian.netty.serial.java.vo2.SubscribeRespProto.SubscribeResp.newBuilder()
private Builder() {
maybeForceBuilderInitialization();
}
private Builder(
BuilderParent parent) {
super(parent);
maybeForceBuilderInitialization();
}
private void maybeForceBuilderInitialization() {
if (com.google.protobuf.GeneratedMessageV3
.alwaysUseFieldBuilders) {
}
}
@Override
public Builder clear() {
super.clear();
subReqID_ = 0;
bitField0_ = (bitField0_ & ~0x00000001);
respCode_ = 0;
bitField0_ = (bitField0_ & ~0x00000002);
desc_ = "";
bitField0_ = (bitField0_ & ~0x00000004);
return this;
}
@Override
public com.google.protobuf.Descriptors.Descriptor
getDescriptorForType() {
return SubscribeRespProto.internal_static_netty_SubscribeResp_descriptor;
}
@Override
public SubscribeResp getDefaultInstanceForType() {
return SubscribeResp.getDefaultInstance();
}
@Override
public SubscribeResp build() {
SubscribeResp result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
return result;
}
@Override
public SubscribeResp buildPartial() {
SubscribeResp result = new SubscribeResp(this);
int from_bitField0_ = bitField0_;
int to_bitField0_ = 0;
if (((from_bitField0_ & 0x00000001) != 0)) {
result.subReqID_ = subReqID_;
to_bitField0_ |= 0x00000001;
}
if (((from_bitField0_ & 0x00000002) != 0)) {
result.respCode_ = respCode_;
to_bitField0_ |= 0x00000002;
}
if (((from_bitField0_ & 0x00000004) != 0)) {
to_bitField0_ |= 0x00000004;
}
result.desc_ = desc_;
result.bitField0_ = to_bitField0_;
onBuilt();
return result;
}
@Override
public Builder clone() {
return super.clone();
}
@Override
public Builder setField(
com.google.protobuf.Descriptors.FieldDescriptor field,
Object value) {
return super.setField(field, value);
}
@Override
public Builder clearField(
com.google.protobuf.Descriptors.FieldDescriptor field) {
return super.clearField(field);
}
@Override
public Builder clearOneof(
com.google.protobuf.Descriptors.OneofDescriptor oneof) {
return super.clearOneof(oneof);
}
@Override
public Builder setRepeatedField(
com.google.protobuf.Descriptors.FieldDescriptor field,
int index, Object value) {
return super.setRepeatedField(field, index, value);
}
@Override
public Builder addRepeatedField(
com.google.protobuf.Descriptors.FieldDescriptor field,
Object value) {
return super.addRepeatedField(field, value);
}
@Override
public Builder mergeFrom(com.google.protobuf.Message other) {
if (other instanceof SubscribeResp) {
return mergeFrom((SubscribeResp)other);
} else {
super.mergeFrom(other);
return this;
}
}
public Builder mergeFrom(SubscribeResp other) {
if (other == SubscribeResp.getDefaultInstance()) return this;
if (other.hasSubReqID()) {
setSubReqID(other.getSubReqID());
}
if (other.hasRespCode()) {
setRespCode(other.getRespCode());
}
if (other.hasDesc()) {
bitField0_ |= 0x00000004;
desc_ = other.desc_;
onChanged();
}
this.mergeUnknownFields(other.unknownFields);
onChanged();
return this;
}
@Override
public final boolean isInitialized() {
if (!hasSubReqID()) {
return false;
}
if (!hasRespCode()) {
return false;
}
if (!hasDesc()) {
return false;
}
return true;
}
@Override
public Builder mergeFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
SubscribeResp parsedMessage = null;
try {
parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
parsedMessage = (SubscribeResp) e.getUnfinishedMessage();
throw e.unwrapIOException();
} finally {
if (parsedMessage != null) {
mergeFrom(parsedMessage);
}
}
return this;
}
private int bitField0_;
private int subReqID_ ;
/**
* <code>required int32 subReqID = 1;</code>
* @return Whether the subReqID field is set.
*/
public boolean hasSubReqID() {
return ((bitField0_ & 0x00000001) != 0);
}
/**
* <code>required int32 subReqID = 1;</code>
* @return The subReqID.
*/
public int getSubReqID() {
return subReqID_;
}
/**
* <code>required int32 subReqID = 1;</code>
* @param value The subReqID to set.
* @return This builder for chaining.
*/
public Builder setSubReqID(int value) {
bitField0_ |= 0x00000001;
subReqID_ = value;
onChanged();
return this;
}
/**
* <code>required int32 subReqID = 1;</code>
* @return This builder for chaining.
*/
public Builder clearSubReqID() {
bitField0_ = (bitField0_ & ~0x00000001);
subReqID_ = 0;
onChanged();
return this;
}
private int respCode_ ;
/**
* <code>required int32 respCode = 2;</code>
* @return Whether the respCode field is set.
*/
public boolean hasRespCode() {
return ((bitField0_ & 0x00000002) != 0);
}
/**
* <code>required int32 respCode = 2;</code>
* @return The respCode.
*/
public int getRespCode() {
return respCode_;
}
/**
* <code>required int32 respCode = 2;</code>
* @param value The respCode to set.
* @return This builder for chaining.
*/
public Builder setRespCode(int value) {
bitField0_ |= 0x00000002;
respCode_ = value;
onChanged();
return this;
}
/**
* <code>required int32 respCode = 2;</code>
* @return This builder for chaining.
*/
public Builder clearRespCode() {
bitField0_ = (bitField0_ & ~0x00000002);
respCode_ = 0;
onChanged();
return this;
}
private Object desc_ = "";
/**
* <code>required string desc = 3;</code>
* @return Whether the desc field is set.
*/
public boolean hasDesc() {
return ((bitField0_ & 0x00000004) != 0);
}
/**
* <code>required string desc = 3;</code>
* @return The desc.
*/
public String getDesc() {
Object ref = desc_;
if (!(ref instanceof String)) {
com.google.protobuf.ByteString bs =
(com.google.protobuf.ByteString) ref;
String s = bs.toStringUtf8();
if (bs.isValidUtf8()) {
desc_ = s;
}
return s;
} else {
return (String) ref;
}
}
/**
* <code>required string desc = 3;</code>
* @return The bytes for desc.
*/
public com.google.protobuf.ByteString
getDescBytes() {
Object ref = desc_;
if (ref instanceof String) {
com.google.protobuf.ByteString b =
com.google.protobuf.ByteString.copyFromUtf8(
(String) ref);
desc_ = b;
return b;
} else {
return (com.google.protobuf.ByteString) ref;
}
}
/**
* <code>required string desc = 3;</code>
* @param value The desc to set.
* @return This builder for chaining.
*/
public Builder setDesc(
String value) {
if (value == null) {
throw new NullPointerException();
}
bitField0_ |= 0x00000004;
desc_ = value;
onChanged();
return this;
}
/**
* <code>required string desc = 3;</code>
* @return This builder for chaining.
*/
public Builder clearDesc() {
bitField0_ = (bitField0_ & ~0x00000004);
desc_ = getDefaultInstance().getDesc();
onChanged();
return this;
}
/**
* <code>required string desc = 3;</code>
* @param value The bytes for desc to set.
* @return This builder for chaining.
*/
public Builder setDescBytes(
com.google.protobuf.ByteString value) {
if (value == null) {
throw new NullPointerException();
}
bitField0_ |= 0x00000004;
desc_ = value;
onChanged();
return this;
}
@Override
public final Builder setUnknownFields(
final com.google.protobuf.UnknownFieldSet unknownFields) {
return super.setUnknownFields(unknownFields);
}
@Override
public final Builder mergeUnknownFields(
final com.google.protobuf.UnknownFieldSet unknownFields) {
return super.mergeUnknownFields(unknownFields);
}
// @@protoc_insertion_point(builder_scope:netty.SubscribeResp)
}
// @@protoc_insertion_point(class_scope:netty.SubscribeResp)
private static final SubscribeResp DEFAULT_INSTANCE;
static {
DEFAULT_INSTANCE = new SubscribeResp();
}
public static SubscribeResp getDefaultInstance() {
return DEFAULT_INSTANCE;
}
@Deprecated public static final com.google.protobuf.Parser<SubscribeResp>
PARSER = new com.google.protobuf.AbstractParser<SubscribeResp>() {
@Override
public SubscribeResp parsePartialFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return new SubscribeResp(input, extensionRegistry);
}
};
public static com.google.protobuf.Parser<SubscribeResp> parser() {
return PARSER;
}
@Override
public com.google.protobuf.Parser<SubscribeResp> getParserForType() {
return PARSER;
}
@Override
public SubscribeResp getDefaultInstanceForType() {
return DEFAULT_INSTANCE;
}
}
private static final com.google.protobuf.Descriptors.Descriptor
internal_static_netty_SubscribeResp_descriptor;
private static final
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internal_static_netty_SubscribeResp_fieldAccessorTable;
public static com.google.protobuf.Descriptors.FileDescriptor
getDescriptor() {
return descriptor;
}
private static com.google.protobuf.Descriptors.FileDescriptor
descriptor;
static {
String[] descriptorData = {
"\n\023SubscribeResp.proto\022\005netty\"A\n\rSubscrib" +
"eResp\022\020\n\010subReqID\030\001 \002(\005\022\020\n\010respCode\030\002 \002(" +
"\005\022\014\n\004desc\030\003 \002(\tBJ\n4club.wujingjian.com.w" +
"ujingjian.netty.serial.java.vo2B\022Subscri" +
"beRespProto"
};
descriptor = com.google.protobuf.Descriptors.FileDescriptor
.internalBuildGeneratedFileFrom(descriptorData,
new com.google.protobuf.Descriptors.FileDescriptor[] {
});
internal_static_netty_SubscribeResp_descriptor =
getDescriptor().getMessageTypes().get(0);
internal_static_netty_SubscribeResp_fieldAccessorTable = new
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_netty_SubscribeResp_descriptor,
new String[] { "SubReqID", "RespCode", "Desc", });
}
// @@protoc_insertion_point(outer_class_scope)
}
测试类: TestSubscribeReqProto.java
package club.wujingjian.com.wujingjian.netty.serial.protobuf.vo2;
import com.google.protobuf.InvalidProtocolBufferException;
public class TestSubscribeReqProto {
private static byte[] encode(SubscribeReqProto.SubscribeReq req) {
return req.toByteArray();
}
private static SubscribeReqProto.SubscribeReq decode(byte[] body) throws InvalidProtocolBufferException {
return SubscribeReqProto.SubscribeReq.parseFrom(body);
}
private static SubscribeReqProto.SubscribeReq createSubscribeReq() {
SubscribeReqProto.SubscribeReq.Builder builder = SubscribeReqProto.SubscribeReq.newBuilder();
builder.setSubReqID(1);
builder.setUserName("wujingjian");
builder.setProductName("Netty Book");
builder.setAddress("BeiJing");
return builder.build();
}
public static void main(String[] args) throws InvalidProtocolBufferException {
SubscribeReqProto.SubscribeReq req = createSubscribeReq();
System.out.println("Before encode :" + req.toString());
SubscribeReqProto.SubscribeReq req2 = decode(encode(req));
System.out.println("After decode :" + req.toString());
System.out.println("Assert equal : --> " + req2.equals(req)); // true
}
}
server端:
SubReqServer.java
package club.wujingjian.com.wujingjian.netty.serial.protobuf.server;
import club.wujingjian.com.wujingjian.netty.serial.protobuf.vo2.SubscribeReqProto;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.codec.protobuf.ProtobufDecoder;
import io.netty.handler.codec.protobuf.ProtobufEncoder;
import io.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder;
import io.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.logging.LoggingHandler;
public class SubReqServer {
public void bind(int port) throws Exception {
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.option(ChannelOption.SO_BACKLOG,100)
.handler(new LoggingHandler(LogLevel.INFO))
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
//处理半包
socketChannel.pipeline().addLast(new ProtobufVarint32FrameDecoder());
//ProtobufDecoder()中参数是com.google.protobuf.MessageLite,实际上就是告诉ProtobufDecoder需要解码的目标类是什么
socketChannel.pipeline().addLast(new ProtobufDecoder(SubscribeReqProto.SubscribeReq.getDefaultInstance()));
socketChannel.pipeline().addLast(new ProtobufVarint32LengthFieldPrepender());
socketChannel.pipeline().addLast(new ProtobufEncoder());
socketChannel.pipeline().addLast(new SubReqServerHandler());
}
});
ChannelFuture f = b.bind(port).sync();
f.channel().closeFuture().sync();
} finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
public static void main(String[] args) throws Exception {
int port = 8080;
if (args != null && args.length > 0) {
port = Integer.parseInt(args[0]);
}
new SubReqServer().bind(port);
}
}
SubReqServerHandler.java
package club.wujingjian.com.wujingjian.netty.serial.protobuf.server;
import club.wujingjian.com.wujingjian.netty.serial.protobuf.vo2.SubscribeReqProto;
import club.wujingjian.com.wujingjian.netty.serial.protobuf.vo2.SubscribeRespProto;
import io.netty.channel.ChannelHandlerAdapter;
import io.netty.channel.ChannelHandlerContext;
public class SubReqServerHandler extends ChannelHandlerAdapter {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
SubscribeReqProto.SubscribeReq req = (SubscribeReqProto.SubscribeReq) msg;
if ("wujingjian".equalsIgnoreCase(req.getUserName())) {
System.out.println("Service accept client subscribe req : [ " + req.toString() + "]");
ctx.writeAndFlush(resp(req.getSubReqID()));
}
}
private SubscribeRespProto.SubscribeResp resp(int subReqID) {
SubscribeRespProto.SubscribeResp.Builder builder = SubscribeRespProto.SubscribeResp.newBuilder();
builder.setSubReqID(subReqID);
builder.setRespCode(0);
builder.setDesc("Netty Book order succeed");
return builder.build();
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
cause.printStackTrace();;
ctx.close();
}
}
client端:SubReqClient.java
package club.wujingjian.com.wujingjian.netty.serial.protobuf.client;
import club.wujingjian.com.wujingjian.netty.serial.protobuf.vo2.SubscribeRespProto;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.protobuf.ProtobufDecoder;
import io.netty.handler.codec.protobuf.ProtobufEncoder;
import io.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder;
import io.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender;
public class SubReqClient {
public void connect(int port, String host) throws Exception {
EventLoopGroup group = new NioEventLoopGroup();
try {
Bootstrap b = new Bootstrap();
b.group(group).channel(NioSocketChannel.class)
.option(ChannelOption.TCP_NODELAY,true)
.handler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
socketChannel.pipeline().addLast(new ProtobufVarint32FrameDecoder());
socketChannel.pipeline().addLast(new ProtobufDecoder(SubscribeRespProto.SubscribeResp.getDefaultInstance()));
socketChannel.pipeline().addLast(new ProtobufVarint32LengthFieldPrepender());
socketChannel.pipeline().addLast(new ProtobufEncoder());
socketChannel.pipeline().addLast(new SubReqClientHandler());
}
});
ChannelFuture f = b.connect(host,port).sync();
f.channel().closeFuture().sync();
} finally {
group.shutdownGracefully();
}
}
public static void main(String[] args) throws Exception {
int port = 8080;
if (args != null && args.length > 0) {
port = Integer.parseInt(args[0]);
}
new SubReqClient().connect(port, "127.0.0.1");
}
}
SubReqClientHandler.java
package club.wujingjian.com.wujingjian.netty.serial.protobuf.client;
import club.wujingjian.com.wujingjian.netty.serial.java.vo.SubscribeReq;
import club.wujingjian.com.wujingjian.netty.serial.protobuf.vo2.SubscribeReqProto;
import io.netty.channel.ChannelHandlerAdapter;
import io.netty.channel.ChannelHandlerContext;
public class SubReqClientHandler extends ChannelHandlerAdapter {
public SubReqClientHandler(){}
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
for (int i = 0; i < 10; i++) {
ctx.write(subReq(i));
}
ctx.flush();
}
private SubscribeReqProto.SubscribeReq subReq(int i) {
SubscribeReqProto.SubscribeReq.Builder build = SubscribeReqProto.SubscribeReq.newBuilder();
build.setAddress("abc地址");
build.setProductName("Netty abc权威指南");
build.setSubReqID(i);
build.setUserName("wujingjian");
return build.build();
}
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
System.out.println("Receive server response :[" + msg +" ]");
}
@Override
public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
ctx.flush();
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
cause.printStackTrace();;
ctx.close();
}
}
但是对中文输出有问题,
server端输出:
client端输出:
标题:7.2 .Netty初认识--编解码-protobuf序列化
作者:码农路上
地址:http://wujingjian.club/articles/2020/03/03/1583217840978.html