perf[protocol]: ByteBufUtils增加针对对象数组的序列化方法

This commit is contained in:
jaysunxiao committed 2021-10-17 11:32:09 +08:00
1 parent 40f04879cc
commit be3596beec
2 files changed
+21

No files matched your search

@@ -1176,4 +1176,15 @@ public abstract class ByteBufUtils {
return chars;
}
public static <T extends IPacket> void writePacketArray(ByteBuf byteBuf, T[] array, IProtocolRegistration protocolRegistration) {
if (array == null) {
byteBuf.writeByte(0);
return;
}
writeInt(byteBuf, array.length);
for (var value : array) {
protocolRegistration.write(byteBuf, value);
}
}
}
@@ -16,6 +16,7 @@ import com.zfoo.protocol.generate.GenerateProtocolFile;
import com.zfoo.protocol.registration.EnhanceUtils;
import com.zfoo.protocol.registration.field.ArrayField;
import com.zfoo.protocol.registration.field.IFieldRegistration;
import com.zfoo.protocol.registration.field.ObjectProtocolField;
import com.zfoo.protocol.util.StringUtils;
import java.lang.reflect.Field;
@@ -160,6 +161,14 @@ public class CutDownArraySerializer implements ICutDownSerializer {
}
break;
default:
if (arrayField.getArrayElementRegistration() instanceof ObjectProtocolField) {
var objectProtocolField = (ObjectProtocolField) arrayField.getArrayElementRegistration();
switch (language) {
case Enhance:
builder.append(StringUtils.format("{}.writePacketArray($1, {}, {});", EnhanceUtils.byteBufUtils, objectStr, EnhanceUtils.getProtocolRegistrationFieldNameByProtocolId(objectProtocolField.getProtocolId())));
return true;
}
}
}
return false;
@@ -293,6 +302,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
}
break;
default:
// Java不支持泛型的数组初始化,这边就不做任何操作
}
GenerateProtocolFile.index.getAndDecrement();