From be3596beeca66c977613735353595a7587537f33 Mon Sep 17 00:00:00 2001 From: jaysunxiao Date: Sun, 17 Oct 2021 11:32:09 +0800 Subject: [PATCH] =?UTF-8?q?perf[protocol]:=20ByteBufUtils=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E9=92=88=E5=AF=B9=E5=AF=B9=E8=B1=A1=E6=95=B0=E7=BB=84?= =?UTF-8?q?=E7=9A=84=E5=BA=8F=E5=88=97=E5=8C=96=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/zfoo/protocol/buffer/ByteBufUtils.java | 11 +++++++++++ .../protocol/serializer/CutDownArraySerializer.java | 10 ++++++++++ 2 files changed, 21 insertions(+) diff --git a/protocol/src/main/java/com/zfoo/protocol/buffer/ByteBufUtils.java b/protocol/src/main/java/com/zfoo/protocol/buffer/ByteBufUtils.java index 580d91ad..160b1b91 100644 --- a/protocol/src/main/java/com/zfoo/protocol/buffer/ByteBufUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/buffer/ByteBufUtils.java @@ -1176,4 +1176,15 @@ public abstract class ByteBufUtils { return chars; } + public static 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); + } + } + } diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownArraySerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownArraySerializer.java index 5ebf84d1..cf455048 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownArraySerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownArraySerializer.java @@ -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();