建议使用哪种数据类型来存储IP地址范围?
例如,
"IP1":["12.21.31.0/24"],
"IP2":["13.96.210.122/28","12.33.116.17/21"]
数据采用JSON格式。我有一个解析此JSON信息的java对象。我只是不确定在Java类中继续使用什么数据类型。请建议。
答案 0 :(得分:2)
InetAddress class将是理想的类型存储IP地址。这比你在这里要求的要多得多。但是从名称/地址或其他方面获取IP会很有用。
由于您使用的是INetAddress不支持的CIDR掩码,因此您需要其他类型
使用Apache SubnetUtils
的代码示例String subnet = "12.21.31.0/24";
SubnetUtils utils = new SubnetUtils(subnet);
utils.getInfo().isInRange(address);
的代码示例
CIDRUtils cidrUtils = new CIDRUtils("10.21.31.0/24");
String networkAddress = cidrUtils.getNetworkAddress();
String broadcastAddress = cidrUtils.getBroadcastAddress();
答案 1 :(得分:0)
IP地址可以表示为32位整数(IPv6为128位)。因此,您可以简单地将范围视为整数范围。然后,您可以考虑TreeSet,位掩码或其他一些数据结构,具体取决于您的查询方式。或者,您编写的实现RangeSet的整数或IP地址包装器类的Comparable可能是一个很好的解决方案。