如何避免,那个 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 中访问互联网?的主要内容,如果未能解决你的问题,请参考以下文章

如何解决fastjson把对象转化成json避免$ref

如何避免 TypeScript 中出现虚假的“未使用参数”警告

如何实现避免未定义行为的侵入式链表?

如何通过Java 合并和取消合并 Excel 单元格

使用 findContours 时如何避免检测到图像帧

如何在OSX上解压缩omni.ja?