This commit is contained in:
redkale
2024-10-19 23:10:49 +08:00
parent 9cf402f18c
commit a19b083478
3 changed files with 66 additions and 3 deletions

View File

@@ -42,6 +42,12 @@ public abstract class ProtobufCoders {
return computeSize(value);
}
// 对象是否为空
@Override
public boolean isEmpty(ProtobufWriter out, Boolean value) {
return (value == null || !value) && out.tiny();
}
@Override
public int computeSize(Boolean value) {
return value == null ? 0 : 1;
@@ -68,6 +74,12 @@ public abstract class ProtobufCoders {
return computeSize(value);
}
// 对象是否为空
@Override
public boolean isEmpty(ProtobufWriter out, Byte value) {
return (value == null || value.byteValue() == 0) && out.tiny();
}
@Override
public int computeSize(Byte value) {
return value == null ? 0 : 1;
@@ -94,6 +106,12 @@ public abstract class ProtobufCoders {
return computeSize(value);
}
// 对象是否为空
@Override
public boolean isEmpty(ProtobufWriter out, Character value) {
return (value == null || value.charValue() == 0) && out.tiny();
}
@Override
public int computeSize(Character value) {
return value == null ? 0 : ProtobufFactory.computeSInt32SizeNoTag(value);
@@ -120,6 +138,12 @@ public abstract class ProtobufCoders {
return computeSize(value);
}
// 对象是否为空
@Override
public boolean isEmpty(ProtobufWriter out, Short value) {
return (value == null || value.shortValue() == 0) && out.tiny();
}
@Override
public int computeSize(Short value) {
return value == null ? 0 : ProtobufFactory.computeSInt32SizeNoTag(value);
@@ -146,6 +170,12 @@ public abstract class ProtobufCoders {
return computeSize(value);
}
// 对象是否为空
@Override
public boolean isEmpty(ProtobufWriter out, Integer value) {
return (value == null || value.intValue() == 0) && out.tiny();
}
@Override
public int computeSize(Integer value) {
return value == null ? 0 : ProtobufFactory.computeSInt32SizeNoTag(value);
@@ -172,6 +202,12 @@ public abstract class ProtobufCoders {
return computeSize(value);
}
// 对象是否为空
@Override
public boolean isEmpty(ProtobufWriter out, Float value) {
return (value == null || value.floatValue() == 0) && out.tiny();
}
@Override
public int computeSize(Float value) {
return value == null ? 0 : 4;
@@ -198,6 +234,12 @@ public abstract class ProtobufCoders {
return computeSize(value);
}
// 对象是否为空
@Override
public boolean isEmpty(ProtobufWriter out, Long value) {
return (value == null || value.longValue() == 0) && out.tiny();
}
@Override
public int computeSize(Long value) {
return value == null ? 0 : ProtobufFactory.computeSInt64SizeNoTag(value);
@@ -224,6 +266,12 @@ public abstract class ProtobufCoders {
return computeSize(value);
}
// 对象是否为空
@Override
public boolean isEmpty(ProtobufWriter out, Double value) {
return (value == null || value.doubleValue() == 0) && out.tiny();
}
@Override
public int computeSize(Double value) {
return value == null ? 0 : 8;
@@ -245,6 +293,12 @@ public abstract class ProtobufCoders {
public static final ProtobufStringSimpledCoder instance = new ProtobufStringSimpledCoder();
// 对象是否为空
@Override
public boolean isEmpty(ProtobufWriter out, String value) {
return (value == null || value.isEmpty()) && out.tiny();
}
@Override
public int computeSize(ProtobufWriter out, int tagSize, String value) {
if (value == null || value.isEmpty()) {

View File

@@ -98,6 +98,11 @@ public abstract class AnyValue {
return value;
}
@Override
public String toString() {
return "{'" + name + "': " + value + "}";
}
static Entry<AnyValue>[] getEntryAnyValueArray(
BiPredicate<String, String> comparison, Entry<AnyValue>[] entitys, String name) {
int len = 0;

View File

@@ -16,6 +16,7 @@ import org.redkale.convert.pb.ProtobufObjectEncoder;
import org.redkale.test.convert.User;
import org.redkale.util.AnyValue;
import org.redkale.util.AnyValueWriter;
import org.redkale.util.Utility;
/**
*
@@ -59,15 +60,18 @@ public class UserTest {
AnyValueWriter writer = AnyValueWriter.create();
writer.addValue("name", "aaa");
writer.addValue("name", "bbb");
writer.addValue("node", AnyValueWriter.create("id", "123"));
writer.addValue("node", AnyValueWriter.create("id", "456"));
writer.addValue("node", AnyValueWriter.create("id", "111"));
writer.addValue("node", AnyValueWriter.create("id", "222"));
writer.addValue("node", AnyValueWriter.create("id", "333"));
System.out.println(writer);
ProtobufObjectEncoder encoder = (ProtobufObjectEncoder) factory.loadEncoder(AnyValueWriter.class);
System.out.println(encoder);
ProtobufArrayEncoder stringEntrys = (ProtobufArrayEncoder) encoder.getMembers()[2].getEncoder();
System.out.println(stringEntrys);
String excepted = "proto-buf 89.[0x12,0x0b,0x0a,0x04,0x6e,0x61,0x6d,0x65,0x12,0x03,0x61,0x61,0x61,0x12,0x0b,0x0a,0x04,0x6e,0x61,0x6d,0x65,0x12,0x03,0x62,0x62,0x62,0x1a,0x13,0x0a,0x04,0x6e,0x6f,0x64,0x65,0x12,0x0b,0x12,0x09,0x0a,0x02,0x69,0x64,0x12,0x03,0x31,0x31,0x31,0x1a,0x13,0x0a,0x04,0x6e,0x6f,0x64,0x65,0x12,0x0b,0x12,0x09,0x0a,0x02,0x69,0x64,0x12,0x03,0x32,0x32,0x32,0x1a,0x13,0x0a,0x04,0x6e,0x6f,0x64,0x65,0x12,0x0b,0x12,0x09,0x0a,0x02,0x69,0x64,0x12,0x03,0x33,0x33,0x33]";
byte[] bs = factory.getConvert().convertTo(AnyValue.class, writer);
System.out.println("长度: " + bs.length);
System.out.println(excepted);
Utility.println("pbconvert ", bs);
AnyValue other = factory.getConvert().convertFrom(AnyValue.class, bs);
System.out.println(other);
Assertions.assertEquals(writer.toString(), other.toString());