java.net

接口
异常
java.lang.Object
  继承者 java.net.InetAddress
      继承者 java.net.Inet6Address
所有已实现的接口:
Serializable

public final class Inet6Address
     
extends InetAddress

此类表示互联网协议第 6 版 (IPv6) 地址。此类由 RFC 2373:IP Version 6 Addressing Architecture 定义。

IP 地址的文本表示形式

用作方法输入的 IPv6 地址的文本表示形式采取以下形式之一:
  1. 首选形式为 x:x:x:x:x:x:x:x,其中这些 'x' 是八个 16 位地址段的十六进制值。这是完整形式。例如,

    1080:0:0:0:8:800:200C:417A

    注意,在个别字段中不必写出前导零。但是,在每个字段中至少必须存在一个数字,以下描述的情况除外。

  2. 由于某些分配确定的 IPv6 地址样式的方法,地址经常包含零位的长字符串。为了更方便地写入包含零位的地址,可以使用特殊语法压缩这些零位。使用 "::"指示多个零的 16 位组。"::"只能在地址中出现一次。"::" 还可用于压缩地址中的前导和/或尾部零。例如,

    1080::8:800:200C:417A
  3. 处理 IPv4 和 IPv6 节点的混合环境时,有一种有时更为方便的替换形式是 x:x:x:x:x:x:d.d.d.d ,其中 'x' 为六个高位 16 位地址段的十六进制值,'d' 为四个低位 8 位标准 IPv4 表示形式地址段的十进制值,例如,

    ::FFFF:129.144.52.38
    ::129.144.52.38

    其中,"::FFFF:d.d.d.d" 和 "::d.d.d.d" 分别为映射 IPv4 的 IPv6 地址 (IPv4-mapped IPv6 address) 和与 IPv4 兼容的 IPv6 地址 (IPv4-compatible IPv6 address) 的一般形式。注意,IPv4 部分必须为 "d.d.d.d" 形式。以下形式是无效的:

    ::FFFF:d.d.d
    ::FFFF:d.d
    ::d.d.d
    ::d.d

    以下形式:

    ::FFFF:d

    有效,不过它是与 IPv4 兼容的 IPv6 地址的非传统表示形式:

    ::255.255.0.d

    在 "::d" 对应于一般 IPv6 地址 "0:0:0:0:0:0:0:d" 时。

对于以输出值形式返回文本表示形式作的方法,使用完整形式。Inet6Address 将返回完整形式,因为在与其他文本数据组合时它是明确的。

特殊 IPv6 地址

映射 IPv4 的地址 其形式为 ::ffff:w.x.y.z,此 IPv6 地址用于表示 IPv4 地址。与 IPv4 和 IPv6 节点通信时,它允许本机程序使用相同的地址数据结构和相同的套接字。

在 InetAddress 和 Inet6Address 中,它用于内部表示形式;没有任何功能职责。Java 永远不返回映射 IPv4 的地址。这些类可以使用映射 IPv4 的地址,作为 byte 数组和文本表示形式的输入。但是,它将被转换为 IPv4 地址。

IPv6 范围地址的文本表示形式

可以扩展上述 IPv6 地址的文本表示形式来指定 IPv6 范围的地址。在 [draft-ietf-ipngwg-scoping-arch-04.txt] 中描述了这种对基本地址体系结构的扩展。

因为链接本地和站点本地地址都是非全球的,所以不同的主机可能具有相同的目标地址并且可能通过相同始发系统上的不同接口到达。在此情况下,视为将始发系统连接到同一范围的多个时区。为了确定哪一个才是真正意义上的目标时区,可以将时区标识符(或 scope_id)添加到 IPv6 地址上。

指定 scope_id 的一般格式如下所示:

IPv6-address% scope_id

IPv6 地址就是上述字面值 IPv6 地址。scope_id 指的是本地系统上的接口,它可以使用两种方式指定。

  1. 作为数字标识符。 它必须是一个系统理解的指定特定接口和范围的正整数。通常,可以通过系统上的管理工具确定这些数字值。每个接口可能具有多个值,每个范围一个。如果没有指定范围,则使用的默认值为零。
  2. 作为字符串。 它必须是相关特定接口的 NetworkInterface.getName() 所返回的确切字符串。如果以此方式创建 Inet6Address,则数字 scope-id 在创建该对象时通过查询相关 NetworkInterface 来确定。

另外注意,可以从 NetworkInterface 类返回的 Inet6Address 实例获取数字 scope_id。这一点可用于找出在系统上配置的当前范围 id。

从以下版本开始:
1.4
另请参见:
序列化表格

方法摘要
 boolean equals(Object obj)
          将此对象与指定对象比较。
 byte[] getAddress()
          返回此 InetAddress 对象的原始 IP 地址。
static Inet6Address getByAddress(String host, byte[] addr, int scope_id)
          完全按照 InetAddress.getByAddress(String,byte[]) 的方式创建 Inet6Address,唯一的不同是将 IPv6 scope_id 设置为给定的数字值。
static Inet6Address getByAddress(String host, byte[] addr, NetworkInterface nif)
          完全按照 InetAddress.getByAddress(String,byte[]) 的方式创建 Inet6Address,唯一的不同是将 IPv6 scope_id 设置为与在 addr 中指定地址类型的给定接口相对应的值。
 String getHostAddress()
          返回 IP 地址字符串(以文本表现形式)。
 NetworkInterface getScopedInterface()
          如果此实例是使用范围接口创建的,则返回范围接口。
 int getScopeId()
          如果此实例与接口关联,则返回数字 scoped_id。
 int hashCode()
          返回此 IP 地址的哈希码。
 boolean isAnyLocalAddress()
          检查 InetAddress 是否是通配符地址的实用例行程序。
 boolean isIPv4CompatibleAddress()
          检查 InetAddress 是否是与 IPv4 兼容的 IPv6 地址的实用例行程序。
 boolean isLinkLocalAddress()
          检查 InetAddress 是否是链接本地地址的实用例行程序。
 boolean isLoopbackAddress()
          检查 InetAddress 是否是回送地址中的实用例行程序。
 boolean isMCGlobal()
          检查多播地址是否具有全球范围的实用例行程序。
 boolean isMCLinkLocal()
          检查多播地址是否具有链接范围的实用例行程序。
 boolean isMCNodeLocal()
          检查多播地址是否具有节点范围的实用例行程序。
 boolean isMCOrgLocal()
          检查多播地址是否具有组织范围的实用例行程序。
 boolean isMCSiteLocal()
          检查多播地址是否具有站点范围的实用例行程序。
 boolean isMulticastAddress()
          检查 InetAddress 是否 IP 多播地址的实用例行程序。
 boolean isSiteLocalAddress()
          检查 InetAddress 是否是站点本地地址的实用例行程序。
 
从类 java.net.InetAddress 继承的方法
getAllByName, getByAddress, getByAddress, getByName, getCanonicalHostName, getHostName, getLocalHost, isReachable, isReachable, toString
 
从类 java.lang.Object 继承的方法
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

方法详细信息

getByAddress

public static Inet6Address getByAddress(String host,
                                        byte[] addr,
                                        NetworkInterface nif)
                                 throws UnknownHostException
完全按照 InetAddress.getByAddress(String,byte[]) 的方式创建 Inet6Address,唯一的不同是将 IPv6 scope_id 设置为与在 addr 中指定地址类型的给定接口相对应的值。如果给定接口不具有为给定地址类型(例如,链接本地或站点本地)分配的数字 scope_id,则调用将失败并抛出 UnknownHostException。有关 IPv6 范围地址的描述,请参见 这里

参数:
host - 指定主机
addr - 网络字节顺序的原始 IP 地址
nif - 必须与此地址关联的接口。
返回:
根据原始 IP 地址创建的 Inet6Address 对象。
抛出:
UnknownHostException - 如果 IP 地址的长度非法或者接口不具有为给定地址类型分配的数字 scope_id。
从以下版本开始:
1.5

getByAddress

public static Inet6Address getByAddress(String host,
                                        byte[] addr,
                                        int scope_id)
                                 throws UnknownHostException
完全按照 InetAddress.getByAddress(String,byte[]) 的方式创建 Inet6Address,唯一的不同是将 IPv6 scope_id 设置为给定的数字值。不会检查 scope_id 以确定其是否与系统上的任何接口相对应。有关 IPv6 范围地址的描述,请参见 这里

参数:
host - 指定主机
addr - 网络字节顺序的原始 IP 地址
scope_id - 地址的数字 scope_id。
返回:
根据原始 IP 地址创建的 Inet6Address 对象。
抛出:
UnknownHostException - 如果 IP 地址的长度非法。
从以下版本开始:
1.5

isMulticastAddress

public boolean isMulticastAddress()
检查 InetAddress 是否 IP 多播地址的实用例行程序。地址开头的 11111111 标识着该地址是一个多播地址。

覆盖:
InetAddress 中的 isMulticastAddress
返回:
指示 InetAddress 是否是 IP 多播地址的 boolean
从以下版本开始:
JDK1.1

isAnyLocalAddress

public boolean isAnyLocalAddress()
检查 InetAddress 是否是通配符地址的实用例行程序。

覆盖:
InetAddress 中的 isAnyLocalAddress
返回:
指示 Inetaddress 是否是通配符地址的 boolean
从以下版本开始:
1.4

isLoopbackAddress

public boolean isLoopbackAddress()
检查 InetAddress 是否是回送地址中的实用例行程序。

覆盖:
InetAddress 中的 isLoopbackAddress
返回:
指示 InetAddress 是否是回送地址的 boolean 值;否则返回 false。
从以下版本开始:
1.4

isLinkLocalAddress

public boolean isLinkLocalAddress()
检查 InetAddress 是否是链接本地地址的实用例行程序。

覆盖:
InetAddress 中的 isLinkLocalAddress
返回:
指示 InetAddress 是否是本地链接地址的 boolean 值;如果地址不是链接本地单播地址,则返回 false。
从以下版本开始:
1.4

isSiteLocalAddress

public boolean isSiteLocalAddress()
检查 InetAddress 是否是站点本地地址的实用例行程序。

覆盖:
InetAddress 中的 isSiteLocalAddress
返回:
指示 InetAddress 是否是站点本地地址的 boolean 值;如果地址不是站点本地单播地址,则返回 false。
从以下版本开始:
1.4

isMCGlobal

public boolean isMCGlobal()
检查多播地址是否具有全球范围的实用例行程序。

覆盖:
InetAddress 中的 isMCGlobal
返回:
指示地址是否是全球范围多播地址的 boolean 值;如果它不是全球范围或多播地址,则返回 false
从以下版本开始:
1.4

isMCNodeLocal

public boolean isMCNodeLocal()
检查多播地址是否具有节点范围的实用例行程序。

覆盖:
InetAddress 中的 isMCNodeLocal
返回:
指示地址是否是节点本地范围多播地址的 boolean 值;如果它不是节点本地范围或多播地址,则返回 false
从以下版本开始:
1.4

isMCLinkLocal

public boolean isMCLinkLocal()
检查多播地址是否具有链接范围的实用例行程序。

覆盖:
InetAddress 中的 isMCLinkLocal
返回:
指示地址是否是链接本地范围多播地址的 boolean 值;如果它不是链接本地范围或多播地址,则返回 false
从以下版本开始:
1.4

isMCSiteLocal

public boolean isMCSiteLocal()
检查多播地址是否具有站点范围的实用例行程序。

覆盖:
InetAddress 中的 isMCSiteLocal
返回:
指示地址是否是站点本地范围多播地址的 boolean 值;如果它不是站点本地范围或多播地址,则返回 false
从以下版本开始:
1.4

isMCOrgLocal

public boolean isMCOrgLocal()
检查多播地址是否具有组织范围的实用例行程序。

覆盖:
InetAddress 中的 isMCOrgLocal
返回:
指示地址是否是组织本地范围多播地址的 boolean 值;如果它不是组织本地范围或多播地址,则返回 false
从以下版本开始:
1.4

getAddress

public byte[] getAddress()
返回此 InetAddress 对象的原始 IP 地址。结果按网络字节顺序:地址的高位字节位于 getAddress()[0] 中。

覆盖:
InetAddress 中的 getAddress
返回:
此对象的原始 IP 地址。

getScopeId

public int getScopeId()
如果此实例与接口关联,则返回数字 scoped_id。如果没有设置任何 scoped_id,则返回值为零。

返回:
scopeId;如果没有设置,则返回零。
从以下版本开始:
1.5

getScopedInterface

public NetworkInterface getScopedInterface()
如果此实例是使用范围接口创建的,则返回范围接口。

返回:
范围接口;如果没有设置,则返回 null。
从以下版本开始:
1.5

getHostAddress

public String getHostAddress()
返回 IP 地址字符串(以文本表现形式)。如果创建的实例指定了范围标识符,则将一个前带 "%"(百分比)符号的范围 id 添加到 IP 地址上。它可以是数字值,也可以是字符串,具体取决于创建实例使用的是哪一种。

覆盖:
InetAddress 中的 getHostAddress
返回:
字符串格式的原始 IP 地址。

hashCode

public int hashCode()
返回此 IP 地址的哈希码。

覆盖:
InetAddress 中的 hashCode
返回:
此 IP 地址的哈希码值。
另请参见:
Object.equals(java.lang.Object), Hashtable

equals

public boolean equals(Object obj)
将此对象与指定对象比较。当且仅当参数不为 null,并且它表示与此对象相同的 IP 地址时,结果才为 true

如果 getAddress 对两个 InetAddress 返回的 byte 数组长度相同并且 byte 数组的每个数组元素也都相同,则这两个 InetAddress 的实例表示相同的 IP 地址。

覆盖:
InetAddress 中的 equals
参数:
obj - 要与之比较的对象。
返回:
如果对象相同,则返回 true;否则,返回 false
另请参见:
InetAddress.getAddress()

isIPv4CompatibleAddress

public boolean isIPv4CompatibleAddress()
检查 InetAddress 是否是与 IPv4 兼容的 IPv6 地址的实用例行程序。

返回:
指示 InetAddress 是否是与 IPv4 兼容的 IPv6 地址的 boolean 值;如果地址为 IPv4 地址,则返回 false。
从以下版本开始:
1.4