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