Java中的奇怪符号用Java表示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的奇怪符号用Java表示相关的知识,希望对你有一定的参考价值。

当我调用方法NetworkInterface.getInetAddresses()时,我得到以下字符串:

"fe80:0:0:0:f06c:31b8:cd17:5a44%5"

我想知道%5在这里意味着什么?没有这个%5,是否有可能使用IPv6地址?

答案

它在这里解释:

Inet6Adress - Format

指定scope_id的一般格式如下:

*IPv6-address%scope_id*

IPv6地址是如上所述的文字IPv6地址。 scope_id是指本地系统上的接口,可以通过两种方式指定。

  1. 作为数字标识符。这必须是一个正整数,用于标识系统所理解的特定接口和范围。通常,数值可以通过系统上的管理工具确定。每个接口可以有多个值,每个范围一个。如果未指定范围,则使用的默认值为零。
  2. 作为一个字符串。这必须是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表示的主要内容,如果未能解决你的问题,请参考以下文章

java 中 和 && 这类的符号都表示啥?

Java-java中的有符号,无符号操作以及DataInputStream

java中的“~”这个符号是表示啥意思啊?

浅谈Java中的补零扩展和补符号位扩展

Java中的数是用补码表示的检验

java中的转义字符的作用是啥?