This commit is contained in:
redkale
2024-10-04 20:02:37 +08:00
parent 37cc5dd080
commit 69fa2c9156
7 changed files with 20 additions and 54 deletions

View File

@@ -17,6 +17,7 @@ import org.redkale.convert.*;
*/ */
public class ProtobufArrayDecoder<T> extends ArrayDecoder<ProtobufReader, T> public class ProtobufArrayDecoder<T> extends ArrayDecoder<ProtobufReader, T>
implements ProtobufTagDecodeable<ProtobufReader, T[]> { implements ProtobufTagDecodeable<ProtobufReader, T[]> {
protected final boolean componentPrimitived; protected final boolean componentPrimitived;
protected final boolean componentSimpled; protected final boolean componentSimpled;

View File

@@ -42,7 +42,7 @@ public class ProtobufArrayEncoder<T> extends ArrayEncoder<ProtobufWriter, T>
protected void convertObjectTo(final ProtobufWriter out, @Nonnull EnMember member, T[] value) { protected void convertObjectTo(final ProtobufWriter out, @Nonnull EnMember member, T[] value) {
ProtobufEncodeable itemEncoder = (ProtobufEncodeable) this.componentEncoder; ProtobufEncodeable itemEncoder = (ProtobufEncodeable) this.componentEncoder;
out.writeArrayB(value.length, itemEncoder, value); //out.writeArrayB(value.length, itemEncoder, value);
boolean first = true; boolean first = true;
for (T item : value) { for (T item : value) {
if (!first) { if (!first) {
@@ -55,7 +55,7 @@ public class ProtobufArrayEncoder<T> extends ArrayEncoder<ProtobufWriter, T>
} }
first = false; first = false;
} }
out.writeArrayE(); //out.writeArrayE();
} }
protected void convertPrimitivedTo(final ProtobufWriter out, @Nonnull EnMember member, T[] value) { protected void convertPrimitivedTo(final ProtobufWriter out, @Nonnull EnMember member, T[] value) {

View File

@@ -18,6 +18,8 @@ import org.redkale.util.ByteTuple;
*/ */
public class ProtobufBytesWriter extends ProtobufWriter { public class ProtobufBytesWriter extends ProtobufWriter {
private static final int RESET_MAX_SIZE = DEFAULT_SIZE << 4;
byte[] content; byte[] content;
// 链表结构 // 链表结构
@@ -60,7 +62,7 @@ public class ProtobufBytesWriter extends ProtobufWriter {
} while (p != this); } while (p != this);
} }
this.delegate = null; this.delegate = null;
if (this.content.length > DEFAULT_SIZE) { if (this.content.length > RESET_MAX_SIZE) {
this.content = new byte[DEFAULT_SIZE]; this.content = new byte[DEFAULT_SIZE];
} }
return true; return true;
@@ -82,7 +84,7 @@ public class ProtobufBytesWriter extends ProtobufWriter {
} }
ProtobufBytesWriter result = queue.poll(); ProtobufBytesWriter result = queue.poll();
if (result == null) { if (result == null) {
result = new ProtobufBytesWriter(new byte[256], 0); result = new ProtobufBytesWriter(new byte[DEFAULT_SIZE], 0);
} }
if (delegate == null) { if (delegate == null) {
result.parent = this; result.parent = this;
@@ -171,7 +173,7 @@ public class ProtobufBytesWriter extends ProtobufWriter {
protected int expand(int len) { protected int expand(int len) {
int newcount = count + len; int newcount = count + len;
if (newcount > content.length) { if (newcount > content.length) {
byte[] newdata = new byte[Math.max(content.length * 2, newcount)]; byte[] newdata = new byte[Math.max(content.length << 1, newcount)];
System.arraycopy(content, 0, newdata, 0, count); System.arraycopy(content, 0, newdata, 0, count);
this.content = newdata; this.content = newdata;
} }

View File

@@ -12,34 +12,7 @@ import java.net.InetSocketAddress;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.*; import java.util.concurrent.atomic.*;
import org.redkale.convert.SimpledCoder; import org.redkale.convert.SimpledCoder;
import org.redkale.convert.ext.AtomicBooleanSimpledCoder; import org.redkale.convert.ext.*;
import org.redkale.convert.ext.AtomicIntegerSimpledCoder;
import org.redkale.convert.ext.AtomicLongSimpledCoder;
import org.redkale.convert.ext.BigDecimalSimpledCoder;
import org.redkale.convert.ext.BigIntegerSimpledCoder;
import org.redkale.convert.ext.BoolSimpledCoder;
import org.redkale.convert.ext.ByteSimpledCoder;
import org.redkale.convert.ext.CharSequenceSimpledCoder;
import org.redkale.convert.ext.CharSequenceSimpledCoder.StringBuilderSimpledCoder;
import org.redkale.convert.ext.CharSimpledCoder;
import org.redkale.convert.ext.DateSimpledCoder;
import org.redkale.convert.ext.DoubleSimpledCoder;
import org.redkale.convert.ext.DurationSimpledCoder;
import org.redkale.convert.ext.FloatSimpledCoder;
import org.redkale.convert.ext.InetAddressSimpledCoder;
import org.redkale.convert.ext.InetAddressSimpledCoder.InetSocketAddressSimpledCoder;
import org.redkale.convert.ext.InstantSimpledCoder;
import org.redkale.convert.ext.IntSimpledCoder;
import org.redkale.convert.ext.LocalDateSimpledCoder;
import org.redkale.convert.ext.LocalDateTimeSimpledCoder;
import org.redkale.convert.ext.LocalTimeSimpledCoder;
import org.redkale.convert.ext.LongAdderSimpledCoder;
import org.redkale.convert.ext.LongSimpledCoder;
import org.redkale.convert.ext.NumberSimpledCoder;
import org.redkale.convert.ext.ShortSimpledCoder;
import org.redkale.convert.ext.StringSimpledCoder;
import org.redkale.convert.ext.StringWrapperSimpledCoder;
import org.redkale.convert.ext.Uint128SimpledCoder;
import org.redkale.util.*; import org.redkale.util.*;
/** /**
@@ -348,7 +321,7 @@ public abstract class ProtobufCoders {
} }
public static class ProtobufStringBuilderSimpledCoder public static class ProtobufStringBuilderSimpledCoder
extends StringBuilderSimpledCoder<ProtobufReader, ProtobufWriter> extends CharSequenceSimpledCoder.StringBuilderSimpledCoder<ProtobufReader, ProtobufWriter>
implements ProtobufEncodeable<ProtobufWriter, StringBuilder> { implements ProtobufEncodeable<ProtobufWriter, StringBuilder> {
public static final ProtobufStringBuilderSimpledCoder instance = new ProtobufStringBuilderSimpledCoder(); public static final ProtobufStringBuilderSimpledCoder instance = new ProtobufStringBuilderSimpledCoder();
@@ -668,7 +641,7 @@ public abstract class ProtobufCoders {
} }
public static class ProtobufInetSocketAddressSimpledCoder public static class ProtobufInetSocketAddressSimpledCoder
extends InetSocketAddressSimpledCoder<ProtobufReader, ProtobufWriter> extends InetAddressSimpledCoder.InetSocketAddressSimpledCoder<ProtobufReader, ProtobufWriter>
implements ProtobufEncodeable<ProtobufWriter, InetSocketAddress> { implements ProtobufEncodeable<ProtobufWriter, InetSocketAddress> {
public static final ProtobufInetSocketAddressSimpledCoder instance = public static final ProtobufInetSocketAddressSimpledCoder instance =

View File

@@ -42,7 +42,7 @@ public class ProtobufCollectionEncoder<T> extends CollectionEncoder<ProtobufWrit
protected void convertObjectTo(final ProtobufWriter out, @Nonnull EnMember member, Collection<T> value) { protected void convertObjectTo(final ProtobufWriter out, @Nonnull EnMember member, Collection<T> value) {
ProtobufEncodeable itemEncoder = (ProtobufEncodeable) this.componentEncoder; ProtobufEncodeable itemEncoder = (ProtobufEncodeable) this.componentEncoder;
out.writeArrayB(value.size(), itemEncoder, value); //out.writeArrayB(value.size(), itemEncoder, value);
boolean first = true; boolean first = true;
for (T item : value) { for (T item : value) {
if (!first) { if (!first) {
@@ -55,7 +55,7 @@ public class ProtobufCollectionEncoder<T> extends CollectionEncoder<ProtobufWrit
} }
first = false; first = false;
} }
out.writeArrayE(); //out.writeArrayE();
} }
protected void convertPrimitivedTo(final ProtobufWriter out, @Nonnull EnMember member, Collection<T> value) { protected void convertPrimitivedTo(final ProtobufWriter out, @Nonnull EnMember member, Collection<T> value) {

View File

@@ -27,8 +27,6 @@ public class ProtobufMapEncoder<K, V> extends MapEncoder<ProtobufWriter, K, V>
private final EnMember keyMember; private final EnMember keyMember;
private final EnMember valueMember; private final EnMember valueMember;
private final boolean keySimpled;
private final boolean valueSimpled;
public ProtobufMapEncoder(ConvertFactory factory, Type type) { public ProtobufMapEncoder(ConvertFactory factory, Type type) {
super(factory, type); super(factory, type);
@@ -39,8 +37,6 @@ public class ProtobufMapEncoder<K, V> extends MapEncoder<ProtobufWriter, K, V>
setTag(valueMember, ProtobufFactory.getTag("value", valueEncoder.getType(), 2, enumtostring)); setTag(valueMember, ProtobufFactory.getTag("value", valueEncoder.getType(), 2, enumtostring));
setTagSize(keyMember, ProtobufFactory.computeSInt32SizeNoTag(keyMember.getTag())); setTagSize(keyMember, ProtobufFactory.computeSInt32SizeNoTag(keyMember.getTag()));
setTagSize(valueMember, ProtobufFactory.computeSInt32SizeNoTag(valueMember.getTag())); setTagSize(valueMember, ProtobufFactory.computeSInt32SizeNoTag(valueMember.getTag()));
this.keySimpled = keyEncoder instanceof SimpledCoder;
this.valueSimpled = valueEncoder instanceof SimpledCoder;
} }
@Override @Override
@@ -55,7 +51,7 @@ public class ProtobufMapEncoder<K, V> extends MapEncoder<ProtobufWriter, K, V>
BiFunction<K, V, V> mapFieldFunc = out.mapFieldFunc(); BiFunction<K, V, V> mapFieldFunc = out.mapFieldFunc();
ProtobufEncodeable kencoder = (ProtobufEncodeable) this.keyEncoder; ProtobufEncodeable kencoder = (ProtobufEncodeable) this.keyEncoder;
ProtobufEncodeable vencoder = (ProtobufEncodeable) this.valueEncoder; ProtobufEncodeable vencoder = (ProtobufEncodeable) this.valueEncoder;
out.writeMapB(values.size(), kencoder, vencoder, value); //out.writeMapB(values.size(), kencoder, vencoder, value);
AtomicBoolean first = new AtomicBoolean(true); AtomicBoolean first = new AtomicBoolean(true);
values.forEach((key, val0) -> { values.forEach((key, val0) -> {
if (ignoreColumns == null || !ignoreColumns.contains(key.toString())) { if (ignoreColumns == null || !ignoreColumns.contains(key.toString())) {
@@ -63,11 +59,7 @@ public class ProtobufMapEncoder<K, V> extends MapEncoder<ProtobufWriter, K, V>
if (!first.get()) { if (!first.get()) {
out.writeField(member); out.writeField(member);
} }
boolean poll = true; ProtobufWriter subout = out.pollChild();
ProtobufWriter subout = poll ? out.pollChild() : out;
if (!poll) {
subout.writeLength(computeSize(out, key, val));
}
subout.writeTag(keyMember.getTag()); subout.writeTag(keyMember.getTag());
if (key == null) { if (key == null) {
subout.writeLength(0); subout.writeLength(0);
@@ -80,16 +72,14 @@ public class ProtobufMapEncoder<K, V> extends MapEncoder<ProtobufWriter, K, V>
} else { } else {
vencoder.convertTo(subout, valueMember, val); vencoder.convertTo(subout, valueMember, val);
} }
if (poll) {
out.offerChild(subout); out.offerChild(subout);
}
first.set(false); first.set(false);
} }
}); });
out.writeMapE(); //out.writeMapE();
} }
public int computeSize(ProtobufWriter out, K key, V val) { protected int computeSize(ProtobufWriter out, K key, V val) {
ProtobufEncodeable kencoder = (ProtobufEncodeable) this.keyEncoder; ProtobufEncodeable kencoder = (ProtobufEncodeable) this.keyEncoder;
ProtobufEncodeable vencoder = (ProtobufEncodeable) this.valueEncoder; ProtobufEncodeable vencoder = (ProtobufEncodeable) this.valueEncoder;
int keySize = kencoder.computeSize(out, keyMember.getTagSize(), key); int keySize = kencoder.computeSize(out, keyMember.getTagSize(), key);

View File

@@ -43,7 +43,7 @@ public class ProtobufStreamEncoder<T> extends StreamEncoder<ProtobufWriter, T>
protected void convertObjectTo(final ProtobufWriter out, @Nonnull EnMember member, Object[] value) { protected void convertObjectTo(final ProtobufWriter out, @Nonnull EnMember member, Object[] value) {
ProtobufEncodeable itemEncoder = (ProtobufEncodeable) this.componentEncoder; ProtobufEncodeable itemEncoder = (ProtobufEncodeable) this.componentEncoder;
out.writeArrayB(value.length, itemEncoder, value); //out.writeArrayB(value.length, itemEncoder, value);
boolean first = true; boolean first = true;
for (Object item : value) { for (Object item : value) {
if (!first) { if (!first) {
@@ -56,7 +56,7 @@ public class ProtobufStreamEncoder<T> extends StreamEncoder<ProtobufWriter, T>
} }
first = false; first = false;
} }
out.writeArrayE(); //out.writeArrayE();
} }
protected void convertPrimitivedTo(final ProtobufWriter out, @Nonnull EnMember member, Object[] value) { protected void convertPrimitivedTo(final ProtobufWriter out, @Nonnull EnMember member, Object[] value) {