提交 2baae144 编写于 作者: 8 844392610

Improve performance of expandIP, and readable

上级 34c34549
...@@ -206,61 +206,31 @@ public class AclUtils { ...@@ -206,61 +206,31 @@ public class AclUtils {
} }
public static String expandIP(String netaddress, int part) { public static String expandIP(String netaddress, int part) {
boolean compress = false; // expand netaddress
int compressIndex = -1; int separatorCount = StringUtils.countMatches(netaddress, ":");
String[] strArray = StringUtils.split(netaddress, ":"); int padCount = part - separatorCount;
ArrayList<Integer> indexes = new ArrayList<>(); if(padCount > 0){
for (int i = 0; i < netaddress.length(); i++) { StringBuilder padStr = new StringBuilder(":");
if (netaddress.charAt(i) == ':') { for(int i = 0; i < padCount; i++){
if (indexes.size() > 0 && i - indexes.get(indexes.size() - 1) == 1) { padStr.append(":");
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++) { for (int i = 0; i < strArray.length; i++) {
if (strArray[i].length() < 4) { if(strArray[i].length() < 4){
strArray[i] = "0000".substring(0, 4 - strArray[i].length()) + strArray[i]; strArray[i] = StringUtils.leftPad(strArray[i], 4, '0');
} }
} }
// output
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
if (compress) { for (int i = 0; i < strArray.length; i++) {
int pos = indexes.indexOf(compressIndex); sb.append(strArray[i]);
int index = 0; if (i != strArray.length - 1) {
if (!netaddress.startsWith(":")) { sb.append(":");
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(); return sb.toString().toUpperCase();
......
...@@ -31,10 +31,12 @@ import org.junit.Test; ...@@ -31,10 +31,12 @@ import org.junit.Test;
public class AclUtilsTest { public class AclUtilsTest {
// strArray[i] = StringUtils.leftPad(strArray[i],4, '0');
@Test @Test
public void getAddreeStrArray() { public void getAddresses() {
String address = "1.1.1.{1,2,3,4}"; String address = "1.1.1.{1,2,3,4}";
String[] addressArray = AclUtils.getAddreeStrArray(address, "{1,2,3,4}"); String[] addressArray = AclUtils.getAddresses(address, "{1,2,3,4}");
List<String> newAddressList = new ArrayList<>(); List<String> newAddressList = new ArrayList<>();
for (String a : addressArray) { for (String a : addressArray) {
newAddressList.add(a); newAddressList.add(a);
...@@ -49,7 +51,7 @@ public class AclUtilsTest { ...@@ -49,7 +51,7 @@ public class AclUtilsTest {
// IPv6 test // IPv6 test
String ipv6Address = "1:ac41:9987::bb22:666:{1,2,3,4}"; String ipv6Address = "1:ac41:9987::bb22:666:{1,2,3,4}";
String[] ipv6AddressArray = AclUtils.getAddreeStrArray(ipv6Address, "{1,2,3,4}"); String[] ipv6AddressArray = AclUtils.getAddresses(ipv6Address, "{1,2,3,4}");
List<String> newIPv6AddressList = new ArrayList<>(); List<String> newIPv6AddressList = new ArrayList<>();
for (String a : ipv6AddressArray) { for (String a : ipv6AddressArray) {
newIPv6AddressList.add(a); newIPv6AddressList.add(a);
...@@ -181,23 +183,28 @@ public class AclUtilsTest { ...@@ -181,23 +183,28 @@ public class AclUtilsTest {
public void v6ipProcessTest() { public void v6ipProcessTest() {
String remoteAddr = "5::7:6:1-200:*"; String remoteAddr = "5::7:6:1-200:*";
String[] strArray = StringUtils.split(remoteAddr, ":"); String[] strArray = StringUtils.split(remoteAddr, ":");
Assert.assertEquals(AclUtils.v6ipProcess(remoteAddr, strArray, 3), "0005:0000:0000:0000:0007:0006"); Assert.assertEquals(AclUtils.v6ipProcess(remoteAddr), "0005:0000:0000:0000:0007:0006");
// Assert.assertEquals(AclUtils.v6ipProcess(remoteAddr, strArray, 3), "0005:0000:0000:0000:0007:0006");
remoteAddr = "5::7:6:1-200"; remoteAddr = "5::7:6:1-200";
strArray = StringUtils.split(remoteAddr, ":"); strArray = StringUtils.split(remoteAddr, ":");
Assert.assertEquals(AclUtils.v6ipProcess(remoteAddr, strArray, 3), "0005:0000:0000:0000:0000:0007:0006"); Assert.assertEquals(AclUtils.v6ipProcess(remoteAddr), "0005:0000:0000:0000:0000:0007:0006");
// Assert.assertEquals(AclUtils.v6ipProcess(remoteAddr, strArray, 3), "0005:0000:0000:0000:0000:0007:0006");
remoteAddr = "5::7:6:*"; remoteAddr = "5::7:6:*";
strArray = StringUtils.split(remoteAddr, ":"); strArray = StringUtils.split(remoteAddr, ":");
Assert.assertEquals(AclUtils.v6ipProcess(remoteAddr, strArray, 3), "0005:0000:0000:0000:0000:0007:0006"); Assert.assertEquals(AclUtils.v6ipProcess(remoteAddr), "0005:0000:0000:0000:0000:0007:0006");
// Assert.assertEquals(AclUtils.v6ipProcess(remoteAddr, strArray, 3), "0005:0000:0000:0000:0000:0007:0006");
remoteAddr = "5:7:6:*"; remoteAddr = "5:7:6:*";
strArray = StringUtils.split(remoteAddr, ":"); strArray = StringUtils.split(remoteAddr, ":");
Assert.assertEquals(AclUtils.v6ipProcess(remoteAddr, strArray, 3), "0005:0007:0006"); Assert.assertEquals(AclUtils.v6ipProcess(remoteAddr), "0005:0007:0006");
// Assert.assertEquals(AclUtils.v6ipProcess(remoteAddr, strArray, 3), "0005:0007:0006");
} }
@Test @Test
public void expandIPTest() { public void expandIPTest() {
Assert.assertEquals(AclUtils.expandIP("::", 8), "0000:0000:0000:0000:0000:0000:0000:0000");
Assert.assertEquals(AclUtils.expandIP("::1", 8), "0000:0000:0000:0000:0000:0000:0000:0001"); Assert.assertEquals(AclUtils.expandIP("::1", 8), "0000:0000:0000:0000:0000:0000:0000:0001");
Assert.assertEquals(AclUtils.expandIP("3::", 8), "0003:0000:0000:0000:0000:0000:0000:0000"); Assert.assertEquals(AclUtils.expandIP("3::", 8), "0003:0000:0000:0000:0000:0000:0000:0000");
Assert.assertEquals(AclUtils.expandIP("2::2", 8), "0002:0000:0000:0000:0000:0000:0000:0002"); Assert.assertEquals(AclUtils.expandIP("2::2", 8), "0002:0000:0000:0000:0000:0000:0000:0002");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册