Java中的奇怪符号用Java表示
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的奇怪符号用Java表示相关的知识,希望对你有一定的参考价值。
当我调用方法NetworkInterface.getInetAddresses()
时,我得到以下字符串:
"fe80:0:0:0:f06c:31b8:cd17:5a44%5"
我想知道%5
在这里意味着什么?没有这个%5
,是否有可能使用IPv6地址?
答案
它在这里解释:
指定scope_id的一般格式如下:
*IPv6-address%scope_id*
IPv6地址是如上所述的文字IPv6地址。 scope_id是指本地系统上的接口,可以通过两种方式指定。
- 作为数字标识符。这必须是一个正整数,用于标识系统所理解的特定接口和范围。通常,数值可以通过系统上的管理工具确定。每个接口可以有多个值,每个范围一个。如果未指定范围,则使用的默认值为零。
- 作为一个字符串。这必须是NetworkInterface.getName()针对特定接口返回的确切字符串。以这种方式创建Inet6Address时,通过查询相关的NetworkInterface在创建对象时确定数字scope-id。
另请注意,可以从NetworkInterface类返回的Inet6Address实例中检索数字scope_id。这可用于查找系统上配置的当前范围ID。
另一答案
5是区域索引。 %用于分隔它。
Windows机器将具有%1之类的机器。
Unix机器会有一个例如%eth0。使用接口名称作为区域索引。
另一答案
%符号表示Ipv6区域或范围ID。
The open-source IPAddress Java library将验证IPv6的所有标准表示。您可以如图所示提取区域。免责声明:我是该图书馆的项目经理。
代码示例:
try {
IPAddressString str = new IPAddressString("fe80:0:0:0:f06c:31b8:cd17:5a44%5");
IPAddress addr = str.toAddress();
if(addr.isIPv6() || addr.isIPv6Convertible()) {
IPv6Address ipv6Addr = addr.toIPv6();
String zone = ipv6Addr.getZone();
IPv6Address noZoneAddr = new IPv6Address(ipv6Addr.getSection());
System.out.println("zone is " + zone + " for address " + noZoneAddr);
}
//use address
} catch(AddressStringException e) {
//e.getMessage has validation error
}
输出:
zone is 5 for address fe80:0:0:0:f06c:31b8:cd17:5a44
以上是关于Java中的奇怪符号用Java表示的主要内容,如果未能解决你的问题,请参考以下文章