[英]Is it really necessary to use url.openConnection()?
眾所周知,這兩個代碼都會產生相同的結果
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);
}
}
和
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);
}
}
那么使用google.openConnection()?
可能是這個方法的javadoc有幫助:
public java.net.URLConnection openConnection() throws java.io.IOException
返回一個
URLConnection
實例,該實例表示與URL
引用的遠程對象的連接。 每次調用此URL的協議處理程序的URLStreamHandler.openConnection(URL)
方法時,都會創建一個新的URLConnection
實例。應該注意,
URLConnection
實例在創建時不建立實際的網絡連接。 只有在調用URLConnection.connect()
時才會發生這種情況。如果對於
URL
的協議(例如HTTP或JAR),存在屬於以下包之一或其子包之一的公共專用URLConnection
子類:java.lang
,java.io
,java.util
,java.net
,返回的連接將是該子類。 例如,對於HTTP,將返回HttpURLConnection
,對於JAR,將返回JarURLConnection
。
如果要為連接添加一些特定的連接屬性,請使用此選項。
例如:
URLConnection urlConnection = google.openConnection();
urlConnection.setReadTimeout(1000);
urlConnection.setConnectTimeout(1000);
由於openStream()
的代碼是:
public final InputStream openStream() throws java.io.IOException {
return openConnection().getInputStream();
}
這看起來確實很多余。
但如果我是你,如果我是openConnection()
d,那么我會在返回的URLConnection
上獲取InputStream
。
openConnection()
不修改URL
對象,它返回一個URLConnection
情況下,你可以再使用。 問題中的代碼忽略了openConnection()
的返回值,因此,在這種情況下,它確實毫無意義。 只有在您對此連接對象實際執行某些操作時才會有用,例如,修改其超時:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.