是否有任何可用于合并多个连续 cidr 块的 java api 或库。
例如:
209.152.214.112/30
209.152.214.116/31
209.152.214.118/31
可以合并到209.152.214.112/29
. 但低于 cidr 不能合并,因为它们不是连续的。
209.152.214.112/30
209.152.214.116/32
209.152.214.118/31
Java中有一个可用的库。开源 IPAddress Java 库具有将地址和子网合并到前缀块子网中的方法。免责声明:我是 IPAddress 库的项目经理。
以下方法“合并”显示了代码,依赖于库中的方法 mergeToPrefixBlocks:
static IPAddress[] merge(String strs[]) {
List<String> strList = Arrays.asList(strs);
// convert first
IPAddress first = new IPAddressString(strList.get(0)).getAddress();
// convert remaining
IPAddress others[] = strList.subList(1, strList.size()).stream().map(str -> new IPAddressString(str).getAddress()).toArray(IPAddress[]::new);
// merge first with remaining
return first.mergeToPrefixBlocks(others);
}
该方法可以通过您的示例进行演示:
System.out.println("blocks are " + Arrays.asList(merge(new String[] {"209.152.214.112/30", "209.152.214.116/31", "209.152.214.118/31"})));
System.out.println("blocks are " + Arrays.asList(merge(new String[] {"209.152.214.112/30", "209.152.214.116/32", "209.152.214.118/31"})));
输出是:
blocks are [209.152.214.112/29]
blocks are [209.152.214.116/32, 209.152.214.118/31, 209.152.214.112/30]