2016-07-29 17 views
4

Wie wir alle diese beiden Codes kennen das gleiche ErgebnisIst es wirklich notwendig, url.openConnection() zu verwenden?

public class MainApp { 
    public static void main(String[] args) throws IOException { 
     URL google = new URL("http://www.google.com"); 
     google.openConnection(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(google.openStream())); 
     reader.lines().forEach(System.out::println); 
    } 
} 

und

public class MainApp { 
    public static void main(String[] args) throws IOException { 
     URL google = new URL("http://www.google.com"); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(google.openStream())); 
     reader.lines().forEach(System.out::println); 
    } 
} 

So ergeben, was der Punkt bei der Verwendung google.openConnection()?

Antwort

1

javadoc für diese Methode sein kann, hilft:

public java.net.URLConnection openConnection() throws java.io.IOException

Gibt eine URLConnection Instanz zurück, die eine Verbindung zu dem Remote-Objekt darstellt, auf das sich die URL bezieht. Eine neue Instanz von URLConnection wird jedes Mal erstellt, wenn für diese URL die Methode URLStreamHandler.openConnection(URL) des Protokollhandlers aufgerufen wird.

Es sollte beachtet werden, dass eine URLConnection Instanz die tatsächliche Netzwerkverbindung bei der Erstellung nicht erstellt. Dies geschieht nur, wenn URLConnection.connect() aufrufen.

Wenn für die URL ‚s-Protokoll (wie HTTP oder JAR), gibt es eine Öffentlichkeit existiert, spezialisierten URLConnection Unterklasse zu einem der Zugehörigkeit folgenden Pakete oder einen ihrer Subpackages: java.lang, java.io, java.util, java.net Die zurückgegebene Verbindung gehört zu dieser Unterklasse. Zum Beispiel wird für HTTP ein HttpURLConnection zurückgegeben, und für JAR wird ein JarURLConnection zurückgegeben.

Verwenden Sie diese Option, wenn Sie der Verbindung bestimmte Verbindungseigenschaften hinzufügen möchten.

Zum Beispiel:

URLConnection urlConnection = google.openConnection(); 

urlConnection.setReadTimeout(1000); 
urlConnection.setConnectTimeout(1000); 
+0

Ist es möglich, 'openconnection()' mehrmals aufgerufen werden? –

+0

Sicher, so viel wie du willst. Das sagt uns Javadoc. Dies als neuer "Transport" für Ihre URL. – ar4ers

1

Da der Code für openStream() ist:

public final InputStream openStream() throws java.io.IOException { 
    return openConnection().getInputStream(); 
} 

Es scheint ziemlich re tatsächlich überfüllt.

Aber wenn ich Sie wäre, wenn ich openConnection() d, würde ich dann die InputStream auf die zurückgegebenen URLConnection.

1

openConnection() tut nicht das URL Objekt ändern, es gibt eine URLConnection Instanz, die Sie dann verwenden können. Der Code in der Frage ignoriert den Rückgabewert openConnection(), in diesem Fall ist es in der Tat sinnlos. es nur sinnvoll wäre, wenn Sie tatsächlich etwas mit diesem Verbindungsobjekt zu tun, wie zum Beispiel seine Timeout ändern:

URL google = new URL("http://www.google.com"); 
URLConnection conn = google.openConnection(); 
conn.setTimeout(7); // just an example 
BufferedReader reader = 
    new BufferedReader(new InputStreamReader(conn.getInputStream())); 
reader.lines().forEach(System.out::println); 
+0

Danke, für den Punkt :) –