Java中URL.openStream()方法的实际返回类型是什么?
Java URL.openStream() 实际返回类型解析
你研究URL.openStream()时发现它的实现是调用openConnection().getInputStream(),而URLConnection的默认getInputStream()仅抛出异常,想知道这个方法实际返回的具体类型?
答案是:实际返回类型完全取决于你URL使用的协议(比如HTTP、HTTPS、file等),因为不同协议对应不同的URLConnection子类,这些子类会重写getInputStream()方法并返回对应协议的具体InputStream实现。
举几个常见协议的例子:
- HTTP/HTTPS协议:当URL是
http://或https://开头时,openConnection()返回HttpURLConnection(或HttpsURLConnection),它的getInputStream()实际返回JDK内部实现类,比如sun.net.www.protocol.http.HttpURLConnection$HttpInputStream(HTTPS对应类似的内部流类)。 - 本地文件协议(file://):此时
openConnection()返回FileURLConnection,getInputStream()实际返回java.io.FileInputStream。 - FTP协议(ftp://):对应的
FtpURLConnection会返回处理FTP数据流的内部实现类。
这种设计是Java面向抽象编程的体现:URL.openStream()声明返回抽象类InputStream,上层代码只需要依赖InputStream的通用方法(如read()、close())即可,无需关心底层具体流实现,同时也方便JDK扩展支持更多协议。
如果想确认某个URL对应的实际返回类型,最简单的方法是在运行时打印类名:
URL url = new URL("https://example.com"); InputStream stream = url.openStream(); System.out.println(stream.getClass().getName()); // 输出具体类名
内容的提问来源于stack exchange,提问作者Osama El-Ghonimy
相关产品推荐
相关产品推荐

