From 7a6c3740c5c5bc6234c3f6eb9101781ab3a4f18d Mon Sep 17 00:00:00 2001 From: 844392610 <844392610@qq.com> Date: Mon, 6 Sep 2021 20:23:19 +0800 Subject: [PATCH] Revert "Improve performance of expandIP, and readable" This reverts commit 2baae144 --- .../apache/rocketmq/acl/common/AclUtils.java | 64 ++++++++++++++----- 1 file changed, 47 insertions(+), 17 deletions(-) diff --git a/acl/src/main/java/org/apache/rocketmq/acl/common/AclUtils.java b/acl/src/main/java/org/apache/rocketmq/acl/common/AclUtils.java index a6b25617..89733202 100644 --- a/acl/src/main/java/org/apache/rocketmq/acl/common/AclUtils.java +++ b/acl/src/main/java/org/apache/rocketmq/acl/common/AclUtils.java @@ -206,31 +206,61 @@ public class AclUtils { } public static String expandIP(String netaddress, int part) { - // expand netaddress - int separatorCount = StringUtils.countMatches(netaddress, ":"); - int padCount = part - separatorCount; - if(padCount > 0){ - StringBuilder padStr = new StringBuilder(":"); - for(int i = 0; i < padCount; i++){ - padStr.append(":"); + boolean compress = false; + int compressIndex = -1; + String[] strArray = StringUtils.split(netaddress, ":"); + ArrayList indexes = new ArrayList<>(); + for (int i = 0; i < netaddress.length(); i++) { + if (netaddress.charAt(i) == ':') { + if (indexes.size() > 0 && i - indexes.get(indexes.size() - 1) == 1) { + compressIndex = i; + compress = true; + } + indexes.add(i); } - netaddress = StringUtils.replace(netaddress, "::", padStr.toString()); } - // pad netaddress - String[] strArray = StringUtils.splitPreserveAllTokens(netaddress, ":"); for (int i = 0; i < strArray.length; i++) { - if(strArray[i].length() < 4){ - strArray[i] = StringUtils.leftPad(strArray[i], 4, '0'); + if (strArray[i].length() < 4) { + strArray[i] = "0000".substring(0, 4 - strArray[i].length()) + strArray[i]; } } - // output StringBuilder sb = new StringBuilder(); - for (int i = 0; i < strArray.length; i++) { - sb.append(strArray[i]); - if (i != strArray.length - 1) { - sb.append(":"); + if (compress) { + int pos = indexes.indexOf(compressIndex); + int index = 0; + if (!netaddress.startsWith(":")) { + for (int i = 0; i < pos; i++) { + sb.append(strArray[index]).append(":"); + index += 1; + } + } + int zeroNum = part - strArray.length; + if (netaddress.endsWith(":")) { + for (int i = 0; i < zeroNum; i++) { + sb.append("0000"); + if (i != zeroNum - 1) { + sb.append(":"); + } + } + } else { + for (int i = 0; i < zeroNum; i++) { + sb.append("0000").append(":"); + } + for (int i = index; i < strArray.length; i++) { + sb.append(strArray[i]); + if (i != strArray.length - 1) { + sb.append(":"); + } + } + } + } else { + for (int i = 0; i < strArray.length; i++) { + sb.append(strArray[i]); + if (i != strArray.length - 1) { + sb.append(":"); + } } } return sb.toString().toUpperCase(); -- GitLab