我用Inet6Address.getByName("2001:db8:0:0:0:0:2:1").toString()
方法压缩IPv6地址,输出是2001:db8:0:0:0:0:2:1
,但我需要2001:db8::2:1
。 ,基本上压缩输出应该基于RFC 5952 standard,即将IPV6地址压缩成Java压缩格式
1)Shorten as Much as Possible:例如,2001:DB8:0:0:0:0:2:1必须被缩短为
2001:DB8 :: 2 :1.同样,2001:db8 :: 0:1是不可接受的, ,因为可以使用符号“::”来产生更短的表示2001:db8 :: 1。
2)Handling One 16-Bit 0 Field:符号 “::” 绝不能使用,以缩短仅一个16位的0场。 例如,表示法2001:db8:0:1:1:1:1:1是正确的,但是不正确。
3)Choice in Placement of "::" : =当在的“::”,连续的16位0的字段的 最长运行必须缩短(即,与 三个连续零个域序列是放置一个替代的选择在2001年缩短: 0:0:1:0:0:0:1)。当连续16位0字段 的长度相等(即,2001:db8:0:0:1:0:0:1)时,务必缩短第一个零位的位。例如,2001:db8 :: 1:0:0:1是正确的 表示。
我也检查了another post in Stack overflow,但没有指定条件(示例选择放置::)。
有没有任何Java库来处理这个问题?任何人都可以帮我吗?
在此先感谢。
愿望哪些格式,我可以更不仅仅是+1详细解释 –
+1相当不俗 –
@Tim真棒....非常感谢你的出色答案。 – Tony