- 所有已实现的接口:
-
Serializable
IP地址的文本表示
作为输入方法的IPv6地址的文本表示采用以下形式之一:-
首选形式为x:x:x:x:x:x:x:x,其中'x'是地址的八个16位部分的十六进制值。这是完整形式。例如,
1080:0:0:0:8:800:200C:417A
请注意,在单个字段中写入前导零并非必需。但是,除非如下所述,每个字段中必须至少有一个数字。
-
由于某些分配某些样式的IPv6地址的方法,地址中包含长字符串的零位将是常见的。为了使包含零位的地址编写更容易,提供了一种特殊的语法来压缩零位。使用“::”表示多个16位零组。在地址中只能出现一次“::”。还可以使用“::”来压缩地址中的前导和/或尾随零位。例如,
1080::8:800:200C:417A
-
在处理IPv4和IPv6节点的混合环境时,有时候另一种更方便的形式是x:x:x:x:x:x:d.d.d.d,其中'x'是地址的六个高阶16位部分的十六进制值,'d'是标准IPv4表示地址的四个低阶8位部分的十进制值,例如,
::FFFF:129.144.52.38
::129.144.52.38
其中“::FFFF:d.d.d.d”和“::d.d.d.d”分别是IPv4映射的IPv6地址和IPv4兼容的IPv6地址的一般形式。请注意,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映射地址作为输入,无论是字节数组还是文本表示。但是,它将被转换为IPv4地址。
IPv6范围地址的文本表示
如上所述的IPv6地址的文本表示可以扩展以指定IPv6范围地址。这种对基本寻址架构的扩展在[draft-ietf-ipngwg-scoping-arch-04.txt]中描述。
由于链路本地和站点本地地址是非全局的,可能不同的主机具有相同的目标地址,并且可以通过同一起始系统上的不同接口到达。在这种情况下,起始系统被称为连接到相同范围的多个区域。为了消除预期目标区域,可以将区域标识符(或scope_id)附加到IPv6地址。
指定scope_id的一般格式如下:
IPv6地址%scope_id
IPv6地址是如上所述的文字IPv6地址。 scope_id指的是本地系统上的一个接口,并且可以通过两种方式指定。
- 作为数字标识符。这必须是一个正整数,用于标识特定接口和范围,如系统所理解的那样。通常,可以通过系统上的管理工具确定数字值。每个接口可能具有多个值,每个范围一个值。如果未指定范围,则使用的默认值为零。
- 作为字符串。这必须是由特定接口的
NetworkInterface.getName()
返回的确切字符串。当以这种方式创建Inet6Address时,数字范围ID是通过查询相关NetworkInterface在对象创建时确定的。
还要注意,可以从NetworkInterface类返回的Inet6Address实例中检索数字scope_id。这可用于查找系统上配置的当前范围ID。
- 自从:
- 1.4
- 外部规范
- 参见:
-
Method Summary
Modifier and TypeMethodDescriptionboolean
比较此对象与指定对象。byte[]
返回此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
中指定的地址类型对应的给定接口的值。返回文本表示中的IP地址字符串。返回作用域接口,如果此实例是使用作用域接口创建的。int
返回数字scopeId,如果此实例与接口关联。int
hashCode()
返回此IP地址的哈希码。boolean
检查InetAddress是否为通配符地址的实用程序例程。boolean
检查InetAddress是否为IPv4兼容的IPv6地址的实用程序例程。boolean
检查InetAddress是否为链路本地地址的实用程序例程。boolean
检查InetAddress是否为环回地址的实用程序例程。boolean
检查多播地址是否具有全局范围的实用程序例程。boolean
检查多播地址是否具有链路范围的实用程序例程。boolean
检查多播地址是否具有节点范围的实用程序例程。boolean
检查多播地址是否具有组织范围的实用程序例程。boolean
检查多播地址是否具有站点范围的实用程序例程。boolean
检查InetAddress是否为IP多播地址的实用程序例程。地址开头的11111111标识地址为多播地址。boolean
检查InetAddress是否为站点本地地址的实用程序例程。Methods declared in class java.net.InetAddress
getAllByName, getByAddress, getByAddress, getByName, getCanonicalHostName, getHostName, getLocalHost, getLoopbackAddress, isReachable, isReachable, toString
-
Method Details
-
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标识地址为多播地址。- 覆盖:
-
isMulticastAddress
在类InetAddress
中 - 返回:
-
一个指示InetAddress是否为IP多播地址的
boolean
-
isAnyLocalAddress
public boolean isAnyLocalAddress()检查InetAddress是否为通配符地址的实用程序例程。- 覆盖:
-
isAnyLocalAddress
在类中的覆盖InetAddress
- 返回:
-
一个
boolean
,指示InetAddress是否为通配符地址。
-
isLoopbackAddress
public boolean isLoopbackAddress()检查InetAddress是否为回环地址的实用程序例程。- 覆盖:
-
isLoopbackAddress
在类中的覆盖InetAddress
- 返回:
-
一个
boolean
,指示InetAddress是否为回环地址;否则为false。
-
isLinkLocalAddress
public boolean isLinkLocalAddress()检查InetAddress是否为链路本地地址的实用程序例程。- 覆盖:
-
isLinkLocalAddress
在类中的覆盖InetAddress
- 返回:
-
一个
boolean
,指示InetAddress是否为链路本地地址;如果地址不是链路本地单播地址,则为false。
-
isSiteLocalAddress
public boolean isSiteLocalAddress()检查InetAddress是否为站点本地地址的实用程序例程。- 覆盖:
-
isSiteLocalAddress
在类中的覆盖InetAddress
- 返回:
-
一个
boolean
,指示InetAddress是否为站点本地地址;如果地址不是站点本地单播地址,则为false。
-
isMCGlobal
public boolean isMCGlobal()检查多播地址是否具有全局范围的实用程序例程。- 覆盖:
-
isMCGlobal
在类中的覆盖InetAddress
- 返回:
-
一个
boolean
,指示地址是否为全局范围的多播地址,如果不是全局范围或不是多播地址,则为false。
-
isMCNodeLocal
public boolean isMCNodeLocal()检查多播地址是否具有节点范围的实用程序例程。- 覆盖:
-
isMCNodeLocal
在类中的覆盖InetAddress
- 返回:
-
一个
boolean
,指示地址是否为节点本地范围的多播地址,如果不是节点本地范围或不是多播地址,则为false。
-
isMCLinkLocal
public boolean isMCLinkLocal()检查多播地址是否具有链路范围的实用程序例程。- 覆盖:
-
isMCLinkLocal
在类中的覆盖InetAddress
- 返回:
-
一个
boolean
,指示地址是否为链路本地范围的多播地址,如果不是链路本地范围或不是多播地址,则为false。
-
isMCSiteLocal
public boolean isMCSiteLocal()检查多播地址是否具有站点范围的实用程序例程。- 覆盖:
-
isMCSiteLocal
在类中的覆盖InetAddress
- 返回:
-
一个
boolean
,指示地址是否为站点本地范围的多播地址,如果不是站点本地范围或不是多播地址,则为false。
-
isMCOrgLocal
public boolean isMCOrgLocal()检查多播地址是否具有组织范围的实用程序例程。- 覆盖:
-
isMCOrgLocal
在类中的覆盖InetAddress
- 返回:
-
一个
boolean
,指示地址是否为组织本地范围的多播地址,如果不是组织本地范围或不是多播地址,则为false。
-
getAddress
public byte[] getAddress()返回此InetAddress
对象的原始IP地址。结果以网络字节顺序表示:地址的最高位字节在getAddress()[0]
中。- 覆盖:
-
getAddress
在类中的覆盖InetAddress
- 返回:
- 此对象的原始IP地址。
-
getScopeId
public int getScopeId()返回此实例关联的数值scopeId。如果未设置scoped_id,则返回值为零。- 返回:
- scopeId,如果未设置则为零。
- 自:
- 1.5
-
getScopedInterface
返回此实例创建时使用的scoped接口。- 返回:
- scoped接口,如果未设置则为null。
- 自:
- 1.5
-
getHostAddress
以文本表示形式返回IP地址字符串。如果实例创建时指定了作用域标识符,则作用域id将附加到IP地址之后,以"%"(百分比)字符为前缀。这可以是数值值或字符串,取决于用于创建实例的是哪种。- 覆盖:
-
getHostAddress
在类中的覆盖InetAddress
- 返回:
- 以字符串格式返回原始IP地址。
-
hashCode
public int hashCode()返回此IP地址的哈希码。- 覆盖:
-
hashCode
在类中的覆盖InetAddress
- 返回:
- 此IP地址的哈希码值。
- 参见:
-
equals
将此对象与指定对象进行比较。结果为true
仅当参数不为null
且表示与此对象相同的IP地址时。如果
InetAddress
的两个实例的getAddress
返回的字节数组长度相同,并且每个数组组件对于字节数组都相同,则它们表示相同的IP地址。- 覆盖:
-
equals
在类中的覆盖InetAddress
- 参数:
-
obj
- 要比较的对象。 - 返回:
-
如果对象相同,则为
true
;否则为false
。 - 参见:
-
isIPv4CompatibleAddress
public boolean isIPv4CompatibleAddress()检查InetAddress是否为IPv4兼容IPv6地址的实用程序例程。- 返回:
-
一个
boolean
,指示InetAddress是否为IPv4兼容IPv6地址;如果地址为IPv4地址,则为false。
-