From 9e5956b25d1b454956c3fa175f02fc6834a580ba Mon Sep 17 00:00:00 2001 From: godotg Date: Sun, 25 Sep 2022 15:38:22 +0800 Subject: [PATCH] =?UTF-8?q?perf[protocol]:=20=E7=BB=9F=E4=B8=80=E5=8F=8D?= =?UTF-8?q?=E5=BA=8F=E5=88=97=E5=8C=96=E4=B8=BA=E7=A9=BA=E7=9A=84=E5=8F=AF?= =?UTF-8?q?=E5=8F=98=E9=9B=86=E5=90=88=E8=AF=AD=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zfoo/protocol/buffer/ByteBufUtils.java | 18 ++++++------ .../zfoo/protocol/collection/ArrayUtils.java | 29 ++----------------- .../protocol/collection/CollectionUtils.java | 19 +++++++++--- .../protocol/registration/EnhanceUtils.java | 1 - .../serializer/reflect/ListSerializer.java | 13 +++------ .../serializer/reflect/MapSerializer.java | 12 ++------ .../serializer/reflect/SetSerializer.java | 12 ++------ 7 files changed, 36 insertions(+), 68 deletions(-) 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 bbf882b3..5e999f13 100644 --- a/protocol/src/main/java/com/zfoo/protocol/buffer/ByteBufUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/buffer/ByteBufUtils.java @@ -430,7 +430,7 @@ public abstract class ByteBufUtils { public static Set readPacketSet(ByteBuf byteBuf, IProtocolRegistration protocolRegistration) { var length = readInt(byteBuf); - var set = (Set) CollectionUtils.newSet(length); + Set set = CollectionUtils.newSet(length); for (var i = 0; i < length; i++) { set.add((IPacket) protocolRegistration.read(byteBuf)); } @@ -619,7 +619,7 @@ public abstract class ByteBufUtils { public static Map readStringIntMap(ByteBuf byteBuf) { var length = readInt(byteBuf); - var map = (Map) CollectionUtils.newMap(length); + Map map = CollectionUtils.newMap(length); for (var i = 0; i < length; i++) { map.put(readString(byteBuf), readIntBox(byteBuf)); } @@ -640,7 +640,7 @@ public abstract class ByteBufUtils { public static Map readStringLongMap(ByteBuf byteBuf) { var length = readInt(byteBuf); - var map = (Map) CollectionUtils.newMap(length); + Map map = CollectionUtils.newMap(length); for (var i = 0; i < length; i++) { map.put(readString(byteBuf), readLongBox(byteBuf)); } @@ -661,7 +661,7 @@ public abstract class ByteBufUtils { public static Map readStringStringMap(ByteBuf byteBuf) { var length = readInt(byteBuf); - var map = (Map) CollectionUtils.newMap(length); + Map map = CollectionUtils.newMap(length); for (var i = 0; i < length; i++) { map.put(readString(byteBuf), readString(byteBuf)); } @@ -682,7 +682,7 @@ public abstract class ByteBufUtils { public static Map readStringPacketMap(ByteBuf byteBuf, IProtocolRegistration protocolRegistration) { var length = readInt(byteBuf); - var map = (Map) CollectionUtils.newMap(length); + Map map = CollectionUtils.newMap(length); for (var i = 0; i < length; i++) { map.put(readString(byteBuf), (IPacket) protocolRegistration.read(byteBuf)); } @@ -760,7 +760,7 @@ public abstract class ByteBufUtils { public static Set readBooleanSet(ByteBuf byteBuf) { var length = readInt(byteBuf); - var set = (Set) CollectionUtils.newSet(length); + Set set = CollectionUtils.newSet(length); for (var i = 0; i < length; i++) { set.add(readBooleanBox(byteBuf)); } @@ -1143,7 +1143,7 @@ public abstract class ByteBufUtils { public static Set readFloatSet(ByteBuf byteBuf) { var length = readInt(byteBuf); - var set = (Set) CollectionUtils.newSet(length); + Set set = CollectionUtils.newSet(length); for (var i = 0; i < length; i++) { set.add(readFloatBox(byteBuf)); } @@ -1224,7 +1224,7 @@ public abstract class ByteBufUtils { public static Set readDoubleSet(ByteBuf byteBuf) { var length = readInt(byteBuf); - var set = (Set) CollectionUtils.newSet(length); + Set set = CollectionUtils.newSet(length); for (var i = 0; i < length; i++) { set.add(readDoubleBox(byteBuf)); } @@ -1282,7 +1282,7 @@ public abstract class ByteBufUtils { public static Set readStringSet(ByteBuf byteBuf) { var length = readInt(byteBuf); - var set = (Set) CollectionUtils.newSet(length); + Set set = CollectionUtils.newSet(length); for (var i = 0; i < length; i++) { set.add(readString(byteBuf)); } diff --git a/protocol/src/main/java/com/zfoo/protocol/collection/ArrayUtils.java b/protocol/src/main/java/com/zfoo/protocol/collection/ArrayUtils.java index 744441e0..09385728 100644 --- a/protocol/src/main/java/com/zfoo/protocol/collection/ArrayUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/collection/ArrayUtils.java @@ -17,7 +17,6 @@ import com.zfoo.protocol.util.AssertionUtils; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.List; /** @@ -194,9 +193,6 @@ public abstract class ArrayUtils { * toList */ public static List toList(boolean[] array) { - if (isEmpty(array)) { - return Collections.emptyList(); - } var list = new ArrayList(); for (var value : array) { list.add(value); @@ -205,9 +201,6 @@ public abstract class ArrayUtils { } public static List toList(byte[] array) { - if (isEmpty(array)) { - return Collections.emptyList(); - } var list = new ArrayList(); for (var value : array) { list.add(value); @@ -216,9 +209,6 @@ public abstract class ArrayUtils { } public static List toList(short[] array) { - if (isEmpty(array)) { - return Collections.emptyList(); - } var list = new ArrayList(); for (var value : array) { list.add(value); @@ -227,9 +217,6 @@ public abstract class ArrayUtils { } public static List toList(int[] array) { - if (isEmpty(array)) { - return Collections.emptyList(); - } var list = new ArrayList(); for (var j : array) { list.add(j); @@ -238,9 +225,6 @@ public abstract class ArrayUtils { } public static List toList(long[] array) { - if (isEmpty(array)) { - return Collections.emptyList(); - } var list = new ArrayList(); for (var j : array) { list.add(j); @@ -249,9 +233,6 @@ public abstract class ArrayUtils { } public static List toList(float[] array) { - if (isEmpty(array)) { - return Collections.emptyList(); - } var list = new ArrayList(); for (var j : array) { list.add(j); @@ -260,9 +241,6 @@ public abstract class ArrayUtils { } public static List toList(double[] array) { - if (isEmpty(array)) { - return Collections.emptyList(); - } var list = new ArrayList(); for (var j : array) { list.add(j); @@ -271,9 +249,6 @@ public abstract class ArrayUtils { } public static List toList(char[] array) { - if (isEmpty(array)) { - return Collections.emptyList(); - } var list = new ArrayList(); for (var j : array) { list.add(j); @@ -283,9 +258,9 @@ public abstract class ArrayUtils { public static List toList(T[] array) { if (isEmpty(array)) { - return Collections.emptyList(); + return CollectionUtils.emptyList(); } - return Arrays.asList(array); + return new ArrayList<>(Arrays.asList(array)); } diff --git a/protocol/src/main/java/com/zfoo/protocol/collection/CollectionUtils.java b/protocol/src/main/java/com/zfoo/protocol/collection/CollectionUtils.java index a547b074..2fe2c16f 100644 --- a/protocol/src/main/java/com/zfoo/protocol/collection/CollectionUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/collection/CollectionUtils.java @@ -74,16 +74,27 @@ public abstract class CollectionUtils { return isEmpty(map) ? Collections.emptyIterator() : map.entrySet().iterator(); } + public static List emptyList() { + return new ArrayList<>(); + } - public static List newList(int size) { + public static Set emptySet() { + return new HashSet<>(); + } + + public static Map emptyMap() { + return new HashMap<>(); + } + + public static List newList(int size) { return size <= 0 ? new ArrayList<>() : new ArrayList<>(comfortableLength(size)); } - public static Set newSet(int size) { + public static Set newSet(int size) { return size <= 0 ? new HashSet<>() : new HashSet<>(comfortableCapacity(size)); } - public static Map newMap(int size) { + public static Map newMap(int size) { return size <= 0 ? new HashMap<>() : new HashMap<>(comfortableCapacity(size)); } @@ -277,7 +288,7 @@ public abstract class CollectionUtils { */ public static List subListLast(List list, int num) { if (isEmpty(list)) { - return Collections.emptyList(); + return emptyList(); } var startIndex = list.size() - num; diff --git a/protocol/src/main/java/com/zfoo/protocol/registration/EnhanceUtils.java b/protocol/src/main/java/com/zfoo/protocol/registration/EnhanceUtils.java index 99a9298b..e83c7756 100644 --- a/protocol/src/main/java/com/zfoo/protocol/registration/EnhanceUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/registration/EnhanceUtils.java @@ -58,7 +58,6 @@ public abstract class EnhanceUtils { // 导入需要的包 classPool.importPackage(IPacket.class.getCanonicalName()); classPool.importPackage(ByteBufUtils.class.getCanonicalName()); - classPool.importPackage(Collections.class.getCanonicalName()); classPool.importPackage(CollectionUtils.class.getCanonicalName()); classPool.importPackage(ArrayUtils.class.getCanonicalName()); classPool.importPackage(Iterator.class.getCanonicalName()); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/reflect/ListSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/reflect/ListSerializer.java index 0dc9ca8d..30c33057 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/reflect/ListSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/reflect/ListSerializer.java @@ -14,12 +14,11 @@ package com.zfoo.protocol.serializer.reflect; import com.zfoo.protocol.buffer.ByteBufUtils; +import com.zfoo.protocol.collection.CollectionUtils; import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.registration.field.ListField; import io.netty.buffer.ByteBuf; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; /** @@ -54,13 +53,9 @@ public class ListSerializer implements ISerializer { @Override public Object readObject(ByteBuf buffer, IFieldRegistration fieldRegistration) { - int size = ByteBufUtils.readInt(buffer); - if (size <= 0) { - return Collections.EMPTY_LIST; - } - ListField listField = (ListField) fieldRegistration; - List list = new ArrayList<>(size); - + var size = ByteBufUtils.readInt(buffer); + var listField = (ListField) fieldRegistration; + List list = CollectionUtils.newList(size); for (int i = 0; i < size; i++) { Object value = listField.getListElementRegistration().serializer().readObject(buffer, listField.getListElementRegistration()); list.add(value); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/reflect/MapSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/reflect/MapSerializer.java index 1de622ab..34e8d3fe 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/reflect/MapSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/reflect/MapSerializer.java @@ -19,8 +19,6 @@ import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.registration.field.MapField; import io.netty.buffer.ByteBuf; -import java.util.Collections; -import java.util.HashMap; import java.util.Map; /** @@ -59,13 +57,9 @@ public class MapSerializer implements ISerializer { @Override public Object readObject(ByteBuf buffer, IFieldRegistration fieldRegistration) { - int size = ByteBufUtils.readInt(buffer); - if (size <= 0) { - return Collections.EMPTY_MAP; - } - - MapField mapField = (MapField) fieldRegistration; - Map map = new HashMap<>(CollectionUtils.comfortableCapacity(size)); + var size = ByteBufUtils.readInt(buffer); + var mapField = (MapField) fieldRegistration; + Map map = CollectionUtils.newMap(size); for (int i = 0; i < size; i++) { Object key = mapField.getMapKeyRegistration().serializer().readObject(buffer, mapField.getMapKeyRegistration()); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/reflect/SetSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/reflect/SetSerializer.java index 9d76f319..d1f5d5fd 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/reflect/SetSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/reflect/SetSerializer.java @@ -19,8 +19,6 @@ import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.registration.field.SetField; import io.netty.buffer.ByteBuf; -import java.util.Collections; -import java.util.HashSet; import java.util.Set; /** @@ -55,13 +53,9 @@ public class SetSerializer implements ISerializer { @Override public Object readObject(ByteBuf buffer, IFieldRegistration fieldRegistration) { - int size = ByteBufUtils.readInt(buffer); - if (size <= 0) { - return Collections.EMPTY_SET; - } - - SetField setField = (SetField) fieldRegistration; - Set set = new HashSet<>(CollectionUtils.comfortableCapacity(size)); + var size = ByteBufUtils.readInt(buffer); + var setField = (SetField) fieldRegistration; + Set set = CollectionUtils.newSet(size); for (int i = 0; i < size; i++) { Object value = setField.getSetElementRegistration().serializer().readObject(buffer, setField.getSetElementRegistration());