Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码)

这篇具有很好参考价值的文章主要介绍了Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/131590559
出自【进步*于辰的博客】

注:
1、派生类1:Inet4Address类;
2、派生类2:Inet6Address类;
3、衍生类:InetSocketAddress类。

1、概述

继承关系:

  • java.lang.Object
    • java.net.InetAddress

所有已实现的接口:
Serializable
直接已知子类:
Inet4Address、Inet6Address


public class InetAddress extends Object implements Serializable

此类表示互联网协议 (IP) 地址。

IP 地址是 IP 使用的 32 位或 128 位 无符号数字 无符号数字 无符号数字,它是一种低级协议,UDP 和 TCP 协议都是在它的基础上构建的。IP 地址的体系结构是由 RFC 790:Assigned Numbers、 RFC 1918:Address Allocation for Private Internets、RFC 2365:Administratively Scoped IP Multicast 和 RFC 2373:IP Version 6 Addressing Architecture 定义。InetAddress 的实例包含 IP 地址,还可能包含相应的主机名(取决于它是否用主机名构造或者是否已执行反向主机名解析)。

地址类型
单播
单个接口的标识符。发送到单播地址的数据包被交付给由该地址标识的接口。
多播地址:也称为 anylocal 地址通配符地址一定不能将其分配给任何节点。它指示缺少地址。它的一个使用示例是可以作为绑定的目标,这允许服务器在服务器主机有多个接口的情况下接收任何接口上的客户端连接。
指定 地址一定不能用作 IP 数据包的目标地址。
回送 地址:它是分配给回送接口的地址。发送到此 IP 地址的任何内容都将返回并作为本地主机上的 IP 输入。此地址常常在测试客户机时使用。
多播
一组接口(通常属于不同的节点)的标识符。发送到多播地址的数据包被交付给由该地址标识的所有接口。

IP 地址范围

链接本地 地址设计用于在单个链接上寻址以解决诸如自动地址配置、邻居发现 (neighbor discovery) 或没有路由器时的问题。

站点本地 地址设计用于在不需要全球前缀时站点内部寻址。

全球 地址在 Internet 中是唯一的。

IP 地址的文本表示形式

IP 地址的文本表示形式是特定于地址系列的。
有关 IPv4 地址格式,请参阅 Inet4Address#format,有关 IPv6 地址格式,请参阅 Inet6Address#format。

主机名解析

主机名到 IP 地址的解析 通过使用本地机器配置信息网络命名服务(如域名系统(Domain Name System,DNS)和网络信息服务(Network Information Service,NIS))来实现。要使用的特定命名服务默认情况下是本地机器配置的那个。对于任何主机名称,都返回其相应的 IP 地址。

反向名称解析 意味着对于任何 IP 地址,都返回与 IP 地址关联的主机。

InetAddress 类提供将主机名解析为其 IP 地址(或反之)的方法。

InetAddress 缓存

InetAddress 类具有一个存储成功及不成功主机名解析的缓存。正缓存用于防止 DNS 哄骗攻击;而负缓存用于提高性能
默认情况下,正主机名解析的结果会永远缓存,因为不存在何时可以安全移除缓存条目的一般规则。不成功主机名解析的结果缓存非常短的时间(10 秒)以提高性能。

在某些特定情形下,即可以确定不可能发生 DNS 哄骗攻击时,可以将 Java 安全属性设置为另外的 Time-to-live (TTL) 值来进行正缓存。类似地,系统管理员在需要时可以配置另外的负缓存 TTL 值。

两个 Java 安全属性控制着用于正负主机名解析缓存的 TTL 值:

networkaddress.cache.ttl(默认值:-1)
指示从名称服务进行成功名称查找的缓存策略。该值被指定为整数,指示缓存成功查找的秒数。
值 -1 指示“永远缓存”。
networkaddress.cache.negative.ttl(默认值:10)
指示从名称服务进行不成功名称查找的缓存策略。该值被指定为整数,指示缓存不成功查找故障的秒数。
值 0 指示“永远不缓存”。值 -1 指示“永远缓存”。

注: \color{red}{注:} 注:
此类是 IP 地址的基础类,一些功能需要具体版本的 IP 地址才能实现。因此,在此类的源码中,大家会看到很多方法的底层没有任何代码或业务,具体源码需查阅此类的两个派生类。
换言之,具体功能是通过两个派生类实现的。至于底层是如何实现调用的,经过对源码的解析,我判断是通过此类的实现类 SocketImpl 间接调用来实现。

从以下版本开始:
JDK1.0
另请参见:
getByAddress(byte[])getByAddress(java.lang.String, byte[])getAllByName(java.lang.String)getByName(java.lang.String)getLocalHost()、序列化表格

2、方法摘要

2.1 boolean equals(Object obj)

将此对象与指定对象比较。
说明:
先看源码。
Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,InetAddress
注译:

  1. obj与当前实例进行比较,当且仅当obj != null,且两者所代表的ip地址相同时,返回 true;
  2. ip相同条件:2个实例通过调用getAddress()(见下1项)获取的byte[]长度成分(内容)相同。

为何源码无任何业务,直接返回 false,暂未可知。

2.2 byte[] getAddress()

返回此 InetAddress 对象的原始 IP 地址。
说明:
先看源码。
Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,InetAddress
具体实现可查阅派生类1的第2.2项。

2.3 static InetAddress[] getAllByName(String host)

在给定主机名的情况下,根据系统上配置的名称服务 返回其 IP 地址所组成的数组。
说明:
先看源码。
Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,InetAddress
底层调用第5.1项。

示例:

InetAddress[] arr1= InetAddress.getAllByName("localhost");
sout Arrays.toString(arr1);// 打印:[localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1]
InetAddress[] arr2 = InetAddress.getAllByName("");
sout Arrays.toString(arr2);// 打印:[localhost/127.0.0.1]

2.4 static InetAddress getByAddress(byte[] addr)

在给定原始 IP 地址的情况下,返回 InetAddress 对象。
说明:
先看源码。
Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,InetAddress
底层调用下1项。

2.5 static InetAddress getByAddress(String host, byte[] addr)

根据提供的主机名和 IP 地址创建 InetAddress。
说明:
看源码。
Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,InetAddress

2.6 static InetAddress getByName(String host)

在给定主机名的情况下确定主机的 IP 地址。
说明:
先看源码。
Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,InetAddress
底层调用第3项。

示例:

InetAddress ip1 = InetAddress.getByName("localhost");
System.out.println(ip1);
System.out.println(ip1.getCanonicalHostName());
System.out.println(ip1.getHostAddress());
System.out.println(ip1.getHostName());

打印结果:
Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,InetAddress

2.7 String getCanonicalHostName()

获取此 IP 地址的完全限定域名。

2.8 String getHostAddress()

返回 IP 地址字符串(以文本表现形式)。
说明:
先看源码。
Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,InetAddress
具体实现可查阅派生类1的第2.3项。

2.9 String getHostName()

获取此 IP 地址的主机名。
说明:
先看源码。
Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,InetAddress

指定:
true表示进行安全检查。

底层调用第5.7项。

2.10 static InetAddress getLocalHost()

返回本地主机。
示例:

InetAddress lp = InetAddress.getLocalHost();
System.out.println(lp);
System.out.println(lp.getCanonicalHostName());
System.out.println(lp.getHostAddress());
System.out.println(lp.getHostName());

打印结果:
Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,InetAddress

2.11 int hashCode()

返回此 IP 地址的哈希码。
说明:
先看源码。
Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,InetAddress
具体实现可查阅派生类1的第2.4项。

2.12 boolean isAnyLocalAddress()

检查 InetAddress 是否是 通配符地址 通配符地址 通配符地址的实用例行程序。
说明:
先看源码。
Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,InetAddress
具体实现可查阅派生类1的第2.5项。

2.13 boolean isLinkLocalAddress()

检查 InetAddress 是否是 链接本地地址 链接本地地址 链接本地地址的实用例行程序。
说明:
看源码。
Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,InetAddress
具体实现可查阅派生类1的第2.6项。

2.14 boolean isLoopbackAddress()

检查 InetAddress 是否是回送地址 的实用例行程序。
说明:
看源码。
Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,InetAddress
具体实现可查阅派生类1的第2.7项。

示例:

InetAddress ip = InetAddress.getByName("localhost");
sout ip.isAnyLocalAddress();// 打印:false
sout ip.isLinkLocalAddress();// 打印:false
sout ip.isLoopbackAddress();// 打印:true

为何本地 ip("localhost")属于 回送地址 回送地址 回送地址,暂未可知。

2.15 boolean isMCGlobal()

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

2.16 boolean isMCLinkLocal()

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

2.17 boolean isMCNodeLocal()

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

2.18 boolean isMCOrgLocal()

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

2.19 boolean isMCSiteLocal()

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

2.20 boolean isMulticastAddress()

检查 InetAddress 是否是 IP 多播地址的实用例行程序。

2.21 boolean isReachable(int timeout)

测试是否可以达到该地址。

2.22 boolean isReachable(NetworkInterface netif, int ttl, int timeout)

测试是否可以达到该地址。

2.23 boolean isSiteLocalAddress()

检查 InetAddress 是否是站点本地地址的实用例行程序。

2.24 String toString()

将此 IP 地址转换为 String。

3、关于嵌套类InetAddressHolder

InetAddress 类的基本信息类。
说明:
先看源码。
Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,InetAddress
可见,此类是 InetAddress 类的 静态内部类 静态内部类 静态内部类用于封装 ip 地址的基本信息,包括:

  1. originalHostName→ 原始主机名,便于基于域的端点识别(暂未知);
  2. hostName→ 主机名;
  3. address→ ip 地址(为何是int类型,暂未知);
  4. family→ 类型,1表示 IPv4,2表示 IPv6。

4、构造方法摘要(不开放)

4.1 null

构造一个默认基本信息的 IP 地址。
说明:
先看源码。
Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,InetAddress
关于new,见第3项。

5、方法摘要(不开放)

5.1 private static InetAddress[] getAllByName(String host, InetAddress reqAddr)

在给定主机名和 IP 地址的情况下,根据系统上配置的名称服务 返回其 IP 地址所组成的数组。
说明:
先看源码。
Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,InetAddress
后续解析。

5.2 private static InetAddress[] getAllByName0 (String host)

在给定主机名的情况下,根据系统上配置的名称服务 返回其 IP 地址所组成的数组。
说明:
先看源码。
Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,InetAddress

指定:
true表示进行安全检查。

底层调用下1项。

5.3 static InetAddress[] getAllByName0 (String host, boolean check)

在给定主机名和是否进行安全检查的情况下,根据系统上配置的名称服务 返回其 IP 地址所组成的数组。
说明:
先看源码。
Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,InetAddress
底层调用下1项。

5.4 private static InetAddress[] getAllByName0 (String host, InetAddress reqAddr, boolean check)

在给定主机名、IP地址和是否进行安全检查的情况下,根据系统上配置的名称服务 返回其 IP 地址所组成的数组。
说明:
先看源码。
Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,InetAddress
关于checkConnect(),见SecurityManager类的第4.5项。

后续补充解析。

5.5 static InetAddress anyLocalAddress()

返回代表anyLocalAddress的 IP 地址。
说明:
先看源码。
Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,InetAddress
impl的类型是 InetAddressImpl,这是此类相关功能实现类的接口,此接口的2个实现类分别是Inet4AddressImplInet6AddressImpl
因此,所调用的是 Inet4AddressImpl 类的anyLocalAddress(),见派生类1的第4.1项。

5.6 InetAddressHolder holder()

返回嵌套类 InetAddressHolder 的实例。
说明:
看源码。
Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,InetAddress

5.7 String getHostName(boolean check)

获取此 IP 地址的主机名。
说明:
先看源码。
Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码),Java-API,Java-API简析,InetAddress
后续解析。

最后

如果大家需要Java-API文档,我上传了《Java-API文档-包含5/8/11三个版本》。


本文暂缓更新。文章来源地址https://www.toymoban.com/news/detail-551868.html

到了这里,关于Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java-API简析_java.io.FilterOutputStream类(基于 Latest JDK)(浅析源码)

    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/134106510 出自【进步*于辰的博客】 继承关系: java.lang.Object java.lang.Enum TimeUnit java.util.concurrent.TimeUnit 所有已实现的接口: Serializable、Comparable TimeUnit public enum Tim

    2024年02月08日
    浏览(27)
  • ES8 向量搜索(knn-search)java-api 实践

    官方文档-knn-search kNN搜索 k-nearest neighbor (kNN)搜索找到与查询向量最近的k个向量,如通过相似度计算。 kNN的常见用例包括: 基于自然语言处理(NLP)算法的相关性排序 产品推荐和推荐引擎 图像或视频的相似性搜索 要运行kNN搜索,您必须能够将数据转换为有意义的向量值

    2024年02月12日
    浏览(34)
  • Hadoop系统应用之HDFS相关操作 - - Java-API对HDFS的操作(IDEA版)

    通过Java API来操作HDFS文件系统HDFS,相关的操作有:文件上传、文件下载、新建文件夹、查看文件、删除文件。 1.Linux下安装好hadoop,这里使用hadoop2.7.3 2.window解压hadoop2.7.3的包 2.Windows下安装好jdk1.8  3.Windows下安装好IDEA,这里使用IDEA2022 4.Windows下安装好maven,这里使用Maven3.6.3

    2024年02月05日
    浏览(40)
  • java:获取本机IP,Linux环境下使用InetAddress.getLocalHost()方法获得127.0.0.1

    知道InetAddress.getLocalHost()方法是可以获取本地ip的,但是在mac电脑上执行的时候,偶尔会得到127.0.0.1的输出,这样拿到本地ip很不稳定,感觉就很不靠谱了 代码 mac上输出 在 windows环境 : 使用InetAddress.getLocalHost()方法看似正常能获得本地ip,实际也有不确定性( 多网卡协同工作环

    2024年02月01日
    浏览(26)
  • com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: con

    com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect 在SpringCloud项目启动注册中心Eureka时报这个错 先粗略的看下报错信息,意思是:注册中心注册不到服务,那这里可能就是application.xml文件有错误,注册中心默认的register-with-eureka: true,但是这里我

    2024年02月16日
    浏览(33)
  • 关于Java中单例模式(饿汉模式和懒汉模式)的简析

    目录 一.什么是单例模式 二.饿汉模式和懒汉模式 饿汉模式 代码 懒汉模式 代码 关于多线程安全的问题 如何解决懒汉模式多线程安全问题 双if判断 简单来说,就是我们在程序中通过代码进行限制,在该程序中 只能创建一个对象 因为只能创建一个对象,所以对于我们而言就有两种

    2024年02月10日
    浏览(66)
  • 基于hadoop的HBase JAVA API

    摘要:   HBase的Java API提供了一种与HBase数据库进行交互的方式,通过编写Java程序可以连接到HBase集群并对数据进行存储、检索和处理。该API适用于大规模数据存储、实时数据访问和高扩展性需求的场景。具有高可靠性、高扩展性和高性能的特点。它可以处理海量数据,并且支

    2024年02月03日
    浏览(30)
  • Java基于API接口爬取淘宝商品数据

    随着互联网的普及和电子商务的快速发展,越来越多的商家选择在淘宝等电商平台上销售商品。对于开发者来说,通过API接口获取淘宝商品数据,可以更加便捷地进行数据分析和商业决策。本文将介绍如何使用Java基于淘宝API接口爬取商品数据,包括请求API、解析JSON数据、存

    2024年02月08日
    浏览(41)
  • 阿里通义千问API(Java)使用教程,基于Springboot后端

    1.1 登录阿里云官网并搜索模型服务灵积,开通key 1.2 点击上图中的控制台并进入 1.3 创建key 2.1 导入以下俩个坐标 2.2 编写Controller层  这里controller层并未将前端的请求数据传入给api中的参数,有需求的可以自己加一下,这里就使用浏览器测试一下看是否返回数据即可  2.3 Ser

    2024年04月09日
    浏览(80)
  • 基于 SpringBoot 2.7.x 使用最新的 Elasticsearch Java API Client 之 ElasticsearchClient

    从 Java Rest Client 7.15.0 版本开始,Elasticsearch 官方决定将 RestHighLevelClient 标记为废弃的,并推荐使用新的 Java API Client,即 ElasticsearchClient. 为什么要将 RestHighLevelClient 废弃,大概有以下几点: 维护成本高 :RestHighLevelClient 需要和 Elasticsearch APIs 的更新保持一致,而 Elasticsearch A

    2024年02月08日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包