2

建议使用什么数据类型来存储 IP 地址范围?

例如,

"IP1":["12.21.31.0/24"],
"IP2":["13.96.210.122/28","12.33.116.17/21"]

数据为 JSON 格式。我有一个解析这个 JSON 信息的 java 对象。我只是不确定要在 Java 类中使用哪种数据类型。请建议。

4

2 回答 2

3

InetAddress 类将是理想的类型存储 IP 地址。这比你在这里要求的要多得多。但是对于从名称/地址或相反的方式获取 IP 很有用。

由于您使用的是 INetAddress 不支持的 CIDR 掩码,因此您需要其他类型

使用 Apache SubnetUtils 的代码示例

String subnet = "12.21.31.0/24";
SubnetUtils utils = new SubnetUtils(subnet);
utils.getInfo().isInRange(address);

使用CIDRUtils 的代码示例

CIDRUtils cidrUtils = new CIDRUtils("10.21.31.0/24");
String networkAddress = cidrUtils.getNetworkAddress();
String broadcastAddress = cidrUtils.getBroadcastAddress();
于 2013-07-18T22:26:20.873 回答
0

IP 地址可以表示为 32 位整数(IPv6 为 128 位)。因此,您可以简单地将范围视为整数范围。然后,您可以考虑使用TreeSet、位掩码或其他一些数据结构,具体取决于您的查询方式。或者,也许整数的RangeSet或您编写的实现Comparable的 IP 地址包装类将是一个很好的解决方案。

于 2013-07-18T22:32:18.827 回答