diff --git a/src/main/java/org/redkale/convert/pb/ProtobufArrayEncoder.java b/src/main/java/org/redkale/convert/pb/ProtobufArrayEncoder.java index 7120438b4..cbf76818a 100644 --- a/src/main/java/org/redkale/convert/pb/ProtobufArrayEncoder.java +++ b/src/main/java/org/redkale/convert/pb/ProtobufArrayEncoder.java @@ -42,7 +42,7 @@ public class ProtobufArrayEncoder extends ArrayEncoder protected void convertObjectTo(final ProtobufWriter out, @Nonnull EnMember member, T[] value) { ProtobufEncodeable itemEncoder = (ProtobufEncodeable) this.componentEncoder; - //out.writeArrayB(value.length, itemEncoder, value); + // out.writeArrayB(value.length, itemEncoder, value); boolean first = true; for (T item : value) { if (!first) { @@ -55,7 +55,7 @@ public class ProtobufArrayEncoder extends ArrayEncoder } first = false; } - //out.writeArrayE(); + // out.writeArrayE(); } protected void convertPrimitivedTo(final ProtobufWriter out, @Nonnull EnMember member, T[] value) { @@ -70,6 +70,12 @@ public class ProtobufArrayEncoder extends ArrayEncoder } } + // 对象是否为空 + @Override + public boolean isEmpty(ProtobufWriter out, T[] value) { + return value == null || value.length == 0; + } + @Override public int computeSize(ProtobufWriter out, int tagSize, T[] value) { if (value == null || value.length == 0) { diff --git a/src/main/java/org/redkale/convert/pb/ProtobufCollectionEncoder.java b/src/main/java/org/redkale/convert/pb/ProtobufCollectionEncoder.java index 07b63c380..3fc12a83d 100644 --- a/src/main/java/org/redkale/convert/pb/ProtobufCollectionEncoder.java +++ b/src/main/java/org/redkale/convert/pb/ProtobufCollectionEncoder.java @@ -42,7 +42,7 @@ public class ProtobufCollectionEncoder extends CollectionEncoder value) { ProtobufEncodeable itemEncoder = (ProtobufEncodeable) this.componentEncoder; - //out.writeArrayB(value.size(), itemEncoder, value); + // out.writeArrayB(value.size(), itemEncoder, value); boolean first = true; for (T item : value) { if (!first) { @@ -55,7 +55,7 @@ public class ProtobufCollectionEncoder extends CollectionEncoder value) { @@ -70,6 +70,12 @@ public class ProtobufCollectionEncoder extends CollectionEncoder value) { + return value == null || value.isEmpty(); + } + @Override public int computeSize(ProtobufWriter out, int tagSize, Collection value) { if (value == null || value.isEmpty()) { diff --git a/src/main/java/org/redkale/convert/pb/ProtobufEncodeable.java b/src/main/java/org/redkale/convert/pb/ProtobufEncodeable.java index c4c99540c..8acea860f 100644 --- a/src/main/java/org/redkale/convert/pb/ProtobufEncodeable.java +++ b/src/main/java/org/redkale/convert/pb/ProtobufEncodeable.java @@ -24,8 +24,11 @@ public interface ProtobufEncodeable extends Encodeable extends MapEncoder BiFunction mapFieldFunc = out.mapFieldFunc(); ProtobufEncodeable kencoder = (ProtobufEncodeable) this.keyEncoder; ProtobufEncodeable vencoder = (ProtobufEncodeable) this.valueEncoder; - //out.writeMapB(values.size(), kencoder, vencoder, value); + // out.writeMapB(values.size(), kencoder, vencoder, value); AtomicBoolean first = new AtomicBoolean(true); values.forEach((key, val0) -> { if (ignoreColumns == null || !ignoreColumns.contains(key.toString())) { @@ -76,7 +76,7 @@ public class ProtobufMapEncoder extends MapEncoder first.set(false); } }); - //out.writeMapE(); + // out.writeMapE(); } protected int computeSize(ProtobufWriter out, K key, V val) { @@ -87,6 +87,12 @@ public class ProtobufMapEncoder extends MapEncoder return (keyMember.getTagSize() + keySize) + (valueMember.getTagSize() + valSize); } + // 对象是否为空 + @Override + public boolean isEmpty(ProtobufWriter out, Map value) { + return value == null || value.isEmpty(); + } + @Override public int computeSize(ProtobufWriter out, int tagSize, Map value) { if (Utility.isEmpty(value)) { diff --git a/src/main/java/org/redkale/convert/pb/ProtobufStreamEncoder.java b/src/main/java/org/redkale/convert/pb/ProtobufStreamEncoder.java index eeb5bf632..793b36133 100644 --- a/src/main/java/org/redkale/convert/pb/ProtobufStreamEncoder.java +++ b/src/main/java/org/redkale/convert/pb/ProtobufStreamEncoder.java @@ -43,7 +43,7 @@ public class ProtobufStreamEncoder extends StreamEncoder protected void convertObjectTo(final ProtobufWriter out, @Nonnull EnMember member, Object[] value) { ProtobufEncodeable itemEncoder = (ProtobufEncodeable) this.componentEncoder; - //out.writeArrayB(value.length, itemEncoder, value); + // out.writeArrayB(value.length, itemEncoder, value); boolean first = true; for (Object item : value) { if (!first) { @@ -56,7 +56,7 @@ public class ProtobufStreamEncoder extends StreamEncoder } first = false; } - //out.writeArrayE(); + // out.writeArrayE(); } protected void convertPrimitivedTo(final ProtobufWriter out, @Nonnull EnMember member, Object[] value) { @@ -71,6 +71,13 @@ public class ProtobufStreamEncoder extends StreamEncoder } } + // 对象是否为空 + @Override + public boolean isEmpty(ProtobufWriter out, Stream value) { + Object[] array = out.putStreamArray(value); + return array == null || array.length == 0; + } + @Override public int computeSize(ProtobufWriter out, int tagSize, Stream value) { Object[] array = out.putStreamArray(value); diff --git a/src/main/java/org/redkale/convert/pb/ProtobufWriter.java b/src/main/java/org/redkale/convert/pb/ProtobufWriter.java index 69a9c7c18..fb876f28b 100644 --- a/src/main/java/org/redkale/convert/pb/ProtobufWriter.java +++ b/src/main/java/org/redkale/convert/pb/ProtobufWriter.java @@ -1065,6 +1065,9 @@ public abstract class ProtobufWriter extends Writer { return; } ProtobufEncodeable encoder = (ProtobufEncodeable) member.getEncoder(); + if (encoder.isEmpty(this, value)) { + return; + } this.writeField(member); encoder.convertTo(this, member, value); }