众所周知,这两个代码都会产生相同的结果
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()?
答案 0 :(得分:3)
这个方法可能是javadoc有帮助:
public java.net.URLConnection openConnection() throws java.io.IOException
返回
URLConnection
实例,该实例表示与URL
引用的远程对象的连接。一个新的实例 每次调用时都会创建URLConnection
协议处理程序的URLStreamHandler.openConnection(URL)
方法 对于此网址。应该注意的是
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);
答案 1 :(得分:2)
由于openStream()
的代码是:
public final InputStream openStream() throws java.io.IOException {
return openConnection().getInputStream();
}
这似乎确实很多余。
但如果我是你,如果我openConnection()
d,那么我会在返回的InputStream
上获得URLConnection
。
答案 2 :(得分:2)
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);