如何避免,那个 URL.equals 需要在 Java 中访问互联网?
Posted
技术标签:
【中文标题】如何避免,那个 URL.equals 需要在 Java 中访问互联网?【英文标题】:How to avoid, that URL.equals needs access to the internet in Java? 【发布时间】:2010-09-22 02:33:24 【问题描述】:Java 类库中 URL 类的 equals()
方法发出 DNS 请求以获取主机名的 IP,以检查两个 IP 是否相等。即使对于从同一个 String
创建的 URL,也会发生这种情况。有没有办法避免这种互联网访问?
【问题讨论】:
【参考方案1】:使用java.net.URI 代替网址。
【讨论】:
当然这也具有语义意义,因为您想比较标识符而不是位置【参考方案2】:如果你只是想比较url字符串,试试
url1.toString().equals(url2.toString())
【讨论】:
这两个字符串可能有很大不同但指向同一个资源。 如果你想检查一个 URL 引用的资源,你显然需要互联网访问。因此,我假设他想比较网址本身。因此,我的资格是“如果您只想比较 url 字符串”。【参考方案3】:不要使用 URL.equals。正如文档所说,
注意:已知为
equals
定义的行为与 HTTP 中的虚拟主机不一致。
【讨论】:
我应该如何测试是否相等? 您可以使用 toString() 或 toExternalForm() 获取外部表单,并进行比较。此处的初步测试表明它无法访问 DNS。 我刚刚赞成比尔的回答。只需在您的 URL 对象上调用 toURI()。以上是关于如何避免,那个 URL.equals 需要在 Java 中访问互联网?的主要内容,如果未能解决你的问题,请参考以下文章