java.net.InetAddress
由于DNS查找的开销可能相当大,所以InetAddress类会缓存查找的结果。
可以使用系统属性networkaddress.cache.ttl和networkaddress.cache.negatice.ttl来控制。其中第一个属性制定了成功的DNS查找结果在Java缓存中保留的时间(秒数),第二个制定了不成功的查找结果缓存的时间(秒数)。在这些时限内,再次尝试查找相同的主机会返回相同的值。
URI、URL
URI是对URL的抽象,不仅包括统一资源定位符(Uniform Resource Locators,URL)还包括统一资源名(Uniform Resource Names,URN)。实际使用的URI大多是URL,但大多数规范和标准(如XML)都是用URI定义的。
URL和URI的区别:
- URI类完全有关于资源的标识和URI的解析。他没有提供方法来获取URI所标识资源的标识。
- 相比URL类,URI类与相关的规范更一致。
- URI对象可以标识相对URI。URL类在存储URI之前会将其绝对化。
简而言之,URL对象是对应网路获取应用层协议的一个表示,而URI对象纯粹用于解析和处理字符串。URI类没有网络获取功能。一般而言,如果想下载一个URL的内容,应当使用URL类,如果想使用URL来完成标识而不是获取,就应当使用URI类。
URI
如果确信自己的URI是没错的话,(由于URI的构造函数还会抛出URISyntaxException异常)那么可以使用静态工厂方法URI.create()。
与URL规范不同的是,URI中使用的字符不限于ASCII。他可以使用其他Unicode字符。在语法上URI没有什么限制。
public String toString();
public String toASCIIString();
toString()方法返回URI的未编码的字符串形式。因此,调用这个方法的结果不能保证是一个语法正确的URI,尽管是加上他是一个语法正确的URI。
toASCIIString()方法返回URI的编码的字符串形式。如ξ等字符总是会完成百分号转义。所以toASCIIString()方法总是返回语法正确的URI。