Die equals()
Methode der URL-Klasse in der Java-Klassenbibliothek erstellt eine DNS-Anforderung zum Abrufen der IP für den Hostnamen, um die beiden IPs auf Gleichheit zu überprüfen. Dies geschieht sogar für URLs, die aus demselben String
erstellt werden. Gibt es eine Möglichkeit, diesen Internetzugang zu vermeiden?Wie vermeidet man, dass URL.equals in Java auf das Internet zugreifen muss?
Antwort
Verwenden java.net.URI statt URL.
Verwenden Sie keine URL.equals. Wie die Dokumentation sagt,
Hinweis: Das definierte Verhalten für
equals
ist bekanntermaßen inkonsistent mit virtuellem Hosting in HTTP.
Wie soll ich auf Gleichheit prüfen? – Mnementh
Sie können toString() oder toExternalForm() verwenden, um das externe Formular abzurufen und diese zu vergleichen. Vorläufige Tests zeigen, dass es nicht auf DNS zugreift. –
Ich habe gerade Bills Antwort neu geordnet. Rufen Sie einfachURI() für Ihre URL-Objekte auf. –
Wenn Sie nur die URL-Strings vergleichen wollen, versuchen
url1.toString().equals(url2.toString())
Die beiden Strings könnten sehr unterschiedlich sein, weisen aber auf dieselbe Ressource hin. –
Wenn Sie die Ressource, auf die sich eine URL bezieht, überprüfen möchten, benötigen Sie natürlich einen Internetzugang. Deshalb habe ich angenommen, dass er die URLs selbst vergleichen möchte. Daher meine Qualifikation "wenn Sie nur die URL-Strings vergleichen möchten". – Rick
Und das macht natürlich semantischen Sinn, weil Sie die Identifiers lieber als die Standorte vergleichen möchten – Gareth