This commit is contained in:
redkale
2024-10-04 18:13:12 +08:00
parent b56feefd8a
commit a3cbc19de9
7 changed files with 97 additions and 60 deletions

View File

@@ -59,10 +59,14 @@ public class ProtobufArrayEncoder<T> extends ArrayEncoder<ProtobufWriter, T>
}
protected void convertPrimitivedTo(final ProtobufWriter out, @Nonnull EnMember member, T[] value) {
out.writeLength(computeSize(out, 0, value));
Encodeable itemCoder = getComponentEncoder();
ProtobufEncodeable itemEncoder = (ProtobufEncodeable) this.componentEncoder;
int dataSize = 0;
for (Object item : value) {
dataSize += itemEncoder.computeSize(out, 0, item);
}
out.writeLength(dataSize);
for (T item : value) {
itemCoder.convertTo(out, item);
itemEncoder.convertTo(out, item);
}
}
@@ -72,10 +76,18 @@ public class ProtobufArrayEncoder<T> extends ArrayEncoder<ProtobufWriter, T>
return 0;
}
ProtobufEncodeable itemEncoder = (ProtobufEncodeable) this.componentEncoder;
int dataSize = componentPrimitived ? 0 : tagSize * (value.length - 1);
for (Object item : value) {
dataSize += itemEncoder.computeSize(out, tagSize, item);
if (componentPrimitived) {
int dataSize = 0;
for (T item : value) {
dataSize += itemEncoder.computeSize(out, tagSize, item);
}
return ProtobufFactory.computeSInt32SizeNoTag(dataSize) + dataSize;
} else {
int dataSize = tagSize * (value.length - 1);
for (T item : value) {
dataSize += itemEncoder.computeSize(out, tagSize, item);
}
return dataSize;
}
return dataSize;
}
}

View File

@@ -275,7 +275,7 @@ public abstract class ProtobufCoders {
return 0;
}
int len = Utility.encodeUTF8Length(value);
return len;
return len + ProtobufFactory.computeSInt32SizeNoTag(len);
}
@Override
@@ -614,7 +614,7 @@ public abstract class ProtobufCoders {
}
byte[] bs = value.toByteArray();
int len = bs.length;
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
@Override
@@ -658,7 +658,7 @@ public abstract class ProtobufCoders {
}
byte[] bs = value.getAddress();
int len = bs.length;
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
@Override
@@ -685,7 +685,7 @@ public abstract class ProtobufCoders {
}
byte[] bs = value.getAddress().getAddress();
int len = bs.length + 2; // port固定2字节
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
@Override
@@ -732,7 +732,7 @@ public abstract class ProtobufCoders {
}
byte[] bs = value.getBytes();
int len = bs.length;
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
@Override
@@ -763,7 +763,7 @@ public abstract class ProtobufCoders {
return 0;
}
int len = value.length;
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
@@ -788,7 +788,7 @@ public abstract class ProtobufCoders {
return 0;
}
int len = value.length;
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
@@ -816,7 +816,7 @@ public abstract class ProtobufCoders {
for (char item : value) {
len += ProtobufFactory.computeSInt32SizeNoTag(item);
}
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
@@ -844,7 +844,7 @@ public abstract class ProtobufCoders {
for (short item : value) {
len += ProtobufFactory.computeSInt32SizeNoTag(item);
}
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
@@ -872,7 +872,7 @@ public abstract class ProtobufCoders {
for (int item : value) {
len += ProtobufFactory.computeSInt32SizeNoTag(item);
}
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
@@ -897,7 +897,7 @@ public abstract class ProtobufCoders {
return 0;
}
int len = value.length << 2;
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
@@ -925,7 +925,7 @@ public abstract class ProtobufCoders {
for (long item : value) {
len += ProtobufFactory.computeSInt64SizeNoTag(item);
}
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
@@ -950,7 +950,7 @@ public abstract class ProtobufCoders {
return 0;
}
int len = value.length << 3;
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
@@ -976,7 +976,7 @@ public abstract class ProtobufCoders {
return 0;
}
int len = value.length;
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
@@ -1001,7 +1001,7 @@ public abstract class ProtobufCoders {
return 0;
}
int len = value.length;
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
@@ -1029,7 +1029,7 @@ public abstract class ProtobufCoders {
for (Character item : value) {
len += ProtobufFactory.computeSInt32SizeNoTag(item == null ? 0 : item);
}
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
@@ -1057,7 +1057,7 @@ public abstract class ProtobufCoders {
for (Short item : value) {
len += ProtobufFactory.computeSInt32SizeNoTag(item == null ? 0 : item);
}
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
@@ -1085,7 +1085,7 @@ public abstract class ProtobufCoders {
for (Integer item : value) {
len += ProtobufFactory.computeSInt32SizeNoTag(item == null ? 0 : item);
}
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
@@ -1110,7 +1110,7 @@ public abstract class ProtobufCoders {
return 0;
}
int len = value.length << 2;
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
@@ -1138,7 +1138,7 @@ public abstract class ProtobufCoders {
for (Long item : value) {
len += ProtobufFactory.computeSInt64SizeNoTag(item == null ? 0 : item);
}
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
@@ -1163,7 +1163,7 @@ public abstract class ProtobufCoders {
return 0;
}
int len = value.length << 3;
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
@@ -1194,7 +1194,7 @@ public abstract class ProtobufCoders {
return 0;
}
int len = value.size();
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
@@ -1224,7 +1224,7 @@ public abstract class ProtobufCoders {
return 0;
}
int len = value.size();
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
@@ -1257,7 +1257,7 @@ public abstract class ProtobufCoders {
for (Character item : value) {
len += ProtobufFactory.computeSInt32SizeNoTag(item == null ? 0 : item);
}
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
@@ -1290,7 +1290,7 @@ public abstract class ProtobufCoders {
for (Short item : value) {
len += ProtobufFactory.computeSInt32SizeNoTag(item == null ? 0 : item);
}
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
@@ -1323,7 +1323,7 @@ public abstract class ProtobufCoders {
for (Integer item : value) {
len += ProtobufFactory.computeSInt32SizeNoTag(item == null ? 0 : item);
}
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
@@ -1353,7 +1353,7 @@ public abstract class ProtobufCoders {
return 0;
}
int len = value.size() << 2;
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
@@ -1386,7 +1386,7 @@ public abstract class ProtobufCoders {
for (Long item : value) {
len += ProtobufFactory.computeSInt64SizeNoTag(item == null ? 0 : item);
}
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
@@ -1416,7 +1416,7 @@ public abstract class ProtobufCoders {
return 0;
}
int len = value.size() << 3;
return len;
return ProtobufFactory.computeSInt32SizeNoTag(len) + len;
}
}
}

View File

@@ -59,10 +59,14 @@ public class ProtobufCollectionEncoder<T> extends CollectionEncoder<ProtobufWrit
}
protected void convertPrimitivedTo(final ProtobufWriter out, @Nonnull EnMember member, Collection<T> value) {
out.writeLength(computeSize(out, 0, value));
Encodeable itemCoder = getComponentEncoder();
ProtobufEncodeable itemEncoder = (ProtobufEncodeable) this.componentEncoder;
int dataSize = 0;
for (Object item : value) {
dataSize += itemEncoder.computeSize(out, 0, item);
}
out.writeLength(dataSize);
for (T item : value) {
itemCoder.convertTo(out, item);
itemEncoder.convertTo(out, item);
}
}
@@ -72,10 +76,18 @@ public class ProtobufCollectionEncoder<T> extends CollectionEncoder<ProtobufWrit
return 0;
}
ProtobufEncodeable itemEncoder = (ProtobufEncodeable) this.componentEncoder;
int dataSize = componentPrimitived ? 0 : tagSize * (value.size() - 1);
for (Object item : value) {
dataSize += itemEncoder.computeSize(out, tagSize, item);
if (componentPrimitived) {
int dataSize = 0;
for (T item : value) {
dataSize += itemEncoder.computeSize(out, tagSize, item);
}
return ProtobufFactory.computeSInt32SizeNoTag(dataSize) + dataSize;
} else {
int dataSize = tagSize * (value.size() - 1);
for (T item : value) {
dataSize += itemEncoder.computeSize(out, tagSize, item);
}
return dataSize;
}
return dataSize;
}
}

View File

@@ -48,9 +48,7 @@ public abstract class ProtobufDynEncoder<T> extends ProtobufObjectEncoder<T> {
protected static ProtobufDynEncoder generateDyncEncoder(final ProtobufFactory factory, final Class clazz) {
final ObjectEncoder selfObjEncoder = factory.createObjectEncoder(clazz);
selfObjEncoder.init(factory); // 必须执行初始化EnMember内部信息
if (true) {
return null;
}
final Map<String, SimpledCoder> simpledCoders = new HashMap<>();
final Map<String, EnMember> otherMembers = new HashMap<>();
StringBuilder elementb = new StringBuilder();

View File

@@ -67,11 +67,11 @@ public class ProtobufObjectEncoder<T> extends ObjectEncoder<ProtobufWriter, T>
@ClassDepends
protected ProtobufWriter acceptWriter(ProtobufWriter out, EnMember member, T value) {
// if (member != null) {
// out.writeLength(computeSize(out, member.getTagSize(), value));
// return out;
// }
// return out;
// if (member != null) {
// out.writeLength(computeSize(out, member.getTagSize(), value));
// return out;
// }
// return out;
return member != null ? out.pollChild() : out;
}
@@ -96,6 +96,9 @@ public class ProtobufObjectEncoder<T> extends ObjectEncoder<ProtobufWriter, T>
@Override
public int computeSize(ProtobufWriter out, int tagSize, T value) {
if (value == null) {
return 0;
}
int dataSize = 0;
BiFunction objFieldFunc = out.objFieldFunc();
for (EnMember member : members) {

View File

@@ -60,10 +60,14 @@ public class ProtobufStreamEncoder<T> extends StreamEncoder<ProtobufWriter, T>
}
protected void convertPrimitivedTo(final ProtobufWriter out, @Nonnull EnMember member, Object[] value) {
out.writeLength(computeSize(out, 0, value));
Encodeable itemCoder = getComponentEncoder();
ProtobufEncodeable itemEncoder = (ProtobufEncodeable) this.componentEncoder;
int dataSize = 0;
for (Object item : value) {
itemCoder.convertTo(out, (T) item);
dataSize += itemEncoder.computeSize(out, 0, item);
}
out.writeLength(dataSize);
for (Object item : value) {
itemEncoder.convertTo(out, item);
}
}
@@ -78,10 +82,18 @@ public class ProtobufStreamEncoder<T> extends StreamEncoder<ProtobufWriter, T>
protected int computeSize(ProtobufWriter out, int tagSize, Object[] value) {
ProtobufEncodeable itemEncoder = (ProtobufEncodeable) this.componentEncoder;
int dataSize = componentPrimitived ? 0 : tagSize * (value.length - 1);
for (Object item : value) {
dataSize += itemEncoder.computeSize(out, tagSize, item);
if (componentPrimitived) {
int dataSize = 0;
for (Object item : value) {
dataSize += itemEncoder.computeSize(out, tagSize, item);
}
return ProtobufFactory.computeSInt32SizeNoTag(dataSize) + dataSize;
} else {
int dataSize = tagSize * (value.length - 1);
for (Object item : value) {
dataSize += itemEncoder.computeSize(out, tagSize, item);
}
return dataSize;
}
return dataSize;
}
}

View File

@@ -145,7 +145,7 @@ public abstract class ProtobufWriter extends Writer {
return count;
}
public final @Nullable Object[] putStreamArray(Stream stream) {
public final @Nullable Object[] putStreamArray(@Nullable Stream stream) {
if (stream == null) {
return null;
}
@@ -157,7 +157,7 @@ public abstract class ProtobufWriter extends Writer {
return rs;
}
public final @Nullable Object[] getStreamArray(Stream stream) {
public final @Nullable Object[] getStreamArray(@Nullable Stream stream) {
if (stream == null) {
return null;
}