背景:在验证字符串是否为有效的ipv6地址时,由于缩写的存在,需要考虑很多情况。
::
::1
2622:ca00:139:594::64:90f3
2622:ca00:0139:0594:0000:0000:0064:90f3都是将ipv6地址表示为字符串的有效方法。如果我需要一个函数来验证一个字符串是否为有效的ipv6地址,我需要考虑所有这些情况。
问题:我需要帮助编写一个java/scala函数,该函数接受一个字节数组并验证它是否为ipv6地址。我似乎找不到的是,当一个ipv6地址被写成一个字节数组时,它总是16个字节长吗?或者有没有类似于用字符串表示法来缩写地址的方法?如果ipv6的字节表示始终是16字节,并且从不缩写,我相信我可以用下面的逻辑测试有效的ipv6 -是这样吗?
/**
* Return true if byte array is a valid ipv6 address.
*
* @param ip - array of bytes representing ip address
* @return - true if ip address is a valid ipv6 address
*/
def isIpV6(ip: Array[Byte]): Boolean = {
ip != null && ip.length == 16
}发布于 2020-03-06 04:13:06
如果你真的需要在没有库的帮助下进行解析,那么有很多复杂的解析方法。它不能放在一页上。
最舒适的方式是InetAddress.getByName(),它会在出现问题时抛出一个异常。
Guava有一种类似的方法,即for IPs only。
https://stackoverflow.com/questions/60552796
复制相似问题