Guava的InetAddresses实用程序类有两种方法:isInetAddress()isUriInetAddress()。 URI IP和纯IP有什么区别?

我假设InetAddresses的方法对IPv4和IPv6同样有效吗?

最佳答案

isInetAddress似乎只是检查IPv4或IPv6的地址,即纯地址。

另一方面,isUriInetAddress尝试调用forUriString,如果成功,则返回true

forUriString的文档规定以下内容:


  返回一个InetAddress,它表示URL的文字IPv4或IPv6主机部分,并以RFC 3986第3.2.2节指定的格式编码。


所述部分说明以下内容:


IPv4:IPv4address,例如0.0.0.0
IPv6:"[" ( IPv6address / IPvFuture ) "]"


因此,对于IPv4,这两种方法似乎都具有相同的结果,而对于IPv6,isUriInetAddress希望地址用方括号括起来。

快速测试:

//IPv4 are treated the same way
isInetAddress("0.0.0.0")      -> true
isUriInetAddress("0.0.0.0")   -> true

isInetAddress("[0.0.0.0]")    -> false
isUriInetAddress("[0.0.0.0]") -> false

//IPv6 are treated differently
isInetAddress("aaaa::bbbb:cccc:dddd:eeee")    -> true
isUriInetAddress("aaaa::bbbb:cccc:dddd:eeee") -> false

isInetAddress("[aaaa::bbbb:cccc:dddd:eeee]")    -> false
isUriInetAddress("[aaaa::bbbb:cccc:dddd:eeee]") -> true

10-06 13:05