【java包系列】Java.net包详解

jdk源码Java.net包详解

一、Java.net包描述

java.net包提供了实现网络应用程序所需的类。java.net包可以大致分为两个部分:

低级API,处理以下抽象:

  • 地址(Addresses):网络标识符,如IP地址。
  • 套接字(Sockets):基本的双向数据通信机制。
  • 接口(Interfaces):描述网络接口。

高级API,处理以下抽象:

  • 统一资源标识符(URIs):表示统一资源标识符。
  • 统一资源定位符(URLs):表示统一资源定位符。
  • 连接(Connections):表示与URL指向的资源的连接。

地址

地址在java.netAPI中被用作主机标识符或套接字端点标识符。

InetAddress类是表示IP(Internet Protocol)地址的抽象。它有两个子类:

  • Inet4Address:用于IPv4地址。
  • Inet6Address:用于IPv6地址。

但是,在大多数情况下,没有必要直接处理这些子类,因为InetAddress抽象应该覆盖大部分所需的功能。

关于IPv6

并非所有系统都支持IPv6协议,虽然Java网络堆栈会尝试在可用时自动检测和使用IPv6,但也可以通过系统属性禁用其使用。在IPv6不可用或明确禁用的情况下,Inet6Address将不再是大多数网络操作的有效参数。例如,当查找主机名时,InetAddress.getByName(java.lang.String)等方法保证不返回Inet6Address,但是通过传递文字可以创建这样的对象。在这种情况下,当使用Inet6Address调用大多数方法时,会抛出异常。

套接字

套接字是在网络上建立机器之间通信链接的方式。java.net包提供了4种类型的套接字:

  • Socket:TCP客户端API,通常用于连接到远程主机。
  • ServerSocket:TCP服务器API,通常接受来自客户端套接字的连接。
  • DatagramSocket:UDP端点API,用于发送和接收数据报包。
  • MulticastSocket:用于处理多播组的DatagramSocket子类。

使用TCP套接字进行发送和接收是通过InputStreamsOutputStreams完成的,可以通过Socket.getInputStream()Socket.getOutputStream()方法获得它们。

接口

NetworkInterface类提供了浏览和查询本地机器的所有网络接口(如以太网连接或PPP终结点)的API。可以通过该类检查任何本地接口是否配置为支持IPv6。

注意,所有符合规范的实现必须支持至少一个NetworkInterface对象,该对象必须连接到网络或者是一个“回环”接口,只能与同一台机器上的实体通信。

高级API

java.net包中的一些类提供了更高级别的抽象,并允许轻松访问网络上的资源。这些类包括:

  • URI:表示统一资源标识符,如RFC 2396中所指定的。正如名称所示,这只是一个标识符,并不直接提供访问资源的方法。
  • URL:表示统一资源定位符,既是URI的旧概念,也是访问资源的手段。
  • URLConnection:从URL创建,并且是用于访问URL指向的资源的通信链接。这个抽象类将大部分工作委托给底层的协议处理程序,如http或https。
  • HttpURLConnection:是URLConnection的子类,提供了一些特定于HTTP协议的附加功能。

建议的使用方式是使用URI来标识资源,然后在访问资源时将其转换为URL。从该URL,您可以获得URLConnection进行精细控制,或直接获取InputStream

以下是一个示例:

URI uri = new URI("http://java.sun.com/");
URL url = uri.toURL();
InputStream in = url.openStream();

协议处理程序

正如提到的,URL和URLConnection依赖于必须存在的协议处理程序,否则将抛出异常。这是与仅标识资源的URI的主要区别,因此不需要访问协议处理程序。因此,虽然可以使用任何类型的协议方案(例如myproto://myhost.mydomain/resource/)创建URI,但类似的URL将尝试实例化指定协议的处理程序;如果不存在,则会抛出异常。

默认情况下,协议处理程序会动态从默认位置加载。然而,通过设置java.protocol.handler.pkgs系统属性,可以将其添加到搜索路径中。例如,如果将其设置为myapp.protocols,则URL代码在http的情况下首先尝试加载myapp.protocols.http.Handler,然后如果失败,则尝试加载默认位置的http.Handler。

请注意,Handler类必须是URLStreamHandler抽象类的子类。

二、接口概述

接口描述
ContentHandlerFactory内容处理器工厂接口。
CookiePolicyCookie策略接口,决定哪些Cookie应该被接受,哪些应该被拒绝。
CookieStoreCookie存储接口,表示一个Cookie的存储。
DatagramSocketImplFactory数据报套接字实现工厂接口。
FileNameMap用于文件名和MIME类型字符串之间进行映射的简单接口。
ProtocolFamily表示通信协议的族。
SocketImplFactory套接字实现工厂接口。
SocketOption<T>与套接字关联的套接字选项。
SocketOptions获取/设置套接字选项的方法接口。
URLStreamHandlerFactoryURL流协议处理程序工厂接口。

三、类概述

描述
AuthenticatorAuthenticator类表示一个知道如何为网络连接获取认证信息的对象。
CacheRequest表示ResponseCache中存储资源的通道。
CacheResponse表示从ResponseCache中检索资源的通道。
ContentHandlerContentHandler抽象类是从URLConnection读取对象的所有类的超类。
CookieHandlerCookieHandler对象提供了将HTTP状态管理策略实现与HTTP协议处理程序连接起来的回调机制。
CookieManagerCookieManager是CookieHandler的具体实现,它将Cookie的存储与接受和拒绝Cookie的策略分离开来。
DatagramPacketDatagramPacket类表示一个数据报包。
DatagramSocketDatagramSocket类表示用于发送和接收数据报包的套接字。
DatagramSocketImpl抽象的数据报和多播套接字实现基类。
HttpCookieHttpCookie对象表示一个HTTP cookie,用于在服务器和用户代理之间传递状态信息。
HttpURLConnection具有支持HTTP特定功能的URLConnection。
IDN提供将国际化域名(IDN)在正常的Unicode表示和ASCII兼容编码(ACE)表示之间进行转换的方法。
Inet4AddressInet4Address类表示IPv4地址。
Inet6AddressInet6Address类表示IPv6地址。
InetAddressInetAddress类表示Internet协议(IP)地址。
InetSocketAddressInetSocketAddress类实现了IP Socket Address(IP地址+端口号),也可以是一对(主机名+端口号),在这种情况下将尝试解析主机名。
InterfaceAddressInterfaceAddress类表示网络接口地址。
JarURLConnection连接到Java ARchive(JAR)文件或JAR文件中的条目的URL连接。
MulticastSocket多播数据报套接字类,用于发送和接收IP多播数据包。
NetPermission用于各种网络权限的类。
NetworkInterfaceNetworkInterface类表示由名称和分配给该接口的IP地址列表组成的网络接口。
PasswordAuthenticationPasswordAuthentication类是一个数据持有者,由Authenticator使用。
ProxyProxy类表示代理设置,通常是类型(http、socks)和套接字地址。
ProxySelector在连接到URL引用的网络资源时,选择要使用的代理服务器(如果有)。
ResponseCache表示URLConnection缓存的实现。
SecureCacheResponse表示最初通过安全方式(如TLS)检索的缓存响应。
ServerSocketServerSocket类实现了服务器套接字。
SocketSocket类实现了客户端套接字(也称为“套接字”)。
SocketAddressSocketAddress类表示没有协议附件的套接字地址。
SocketImplSocketImpl抽象类是所有实际实现套接字的类的公共超类。
SocketPermissionSocketPermission类表示通过套接字访问网络的权限。
StandardSocketOptions定义了标准的套接字选项。
URI表示统一资源标识符(URI)引用。
URLURL类表示统一资源定位符,即指向“网络上的资源”的指针。
URLClassLoader此类加载器用于从URL的搜索路径中加载类和资源,这些URL引用JAR文件和目录。
URLConnectionURLConnection抽象类是表示应用程序与URL之间的通信链接的所有类的超类。
URLDecoder用于HTML表单解码的实用类。
URLEncoder用于HTML表单编码的实用类。

四、枚举概述

枚举描述
Authenticator.RequestorType请求身份验证的实体类型。
Proxy.Type代表代理类型。
StandardProtocolFamily定义通信协议的标准族。

五、异常概述

异常描述
BindException在尝试将套接字绑定到本地地址和端口时发生错误。
ConnectException在尝试将套接字连接到远程地址和端口时发生错误。
HttpRetryException表示需要重试HTTP请求,但由于启用了流模式,无法自动重试。
MalformedURLException表示发生了格式错误的URL。
NoRouteToHostException在尝试将套接字连接到远程地址和端口时发生错误。
PortUnreachableException表示已在连接的数据报上收到ICMP Port Unreachable消息。
ProtocolException指示底层协议存在错误,例如TCP错误。
SocketException表示创建或访问套接字时出现错误。
SocketTimeoutException表示套接字读取或接受超时。
UnknownHostException表示无法确定主机的IP地址。
UnknownServiceException表示发生了未知的服务异常。
URISyntaxException表示无法将字符串解析为URI引用。

六、官方链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigDataMLApplication

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值