当我将InputStream传递给此方法时, 它关闭了吗?
public void foo(InputStream is) {
DataInputStream dis = new DataInputStream(is);
dis.close();
}
超类FilterInputStream也将close方法重新定义为关闭基础输入流,因此它将关闭参数 。
该操作会影响来电者的输入流吗?
答案 0 :(得分:2)
是的,传入的流将被关闭。
关闭你没有打开过的溪流几乎不是一个好主意,因此你不应该在这种方法中关闭dis
。
DataInputStream
不拥有自己的系统资源,因此不关闭它不会导致任何泄漏。你可以简单地打开它。或者,您可以从方法返回它,以便调用者可以关闭它。
答案 1 :(得分:2)
是的,DataInputStream
是一个超过InputStream
is
的装饰者类。它不是InputStream
自我。
因此,DataInputStream.close
隐含close
隐含InputStream
。{/ p>
/**
* Closes this input stream and releases any system resources
* associated with the stream.
* This
* method simply performs <code>in.close()</code>.
*
* @exception IOException if an I/O error occurs.
* @see java.io.FilterInputStream#in
*/
public void close() throws IOException {
in.close();
}
答案 2 :(得分:1)
将关闭InputStream。
从Java SE 7开始,最好使用try-with-resources,以便自动关闭流。
答案 3 :(得分:1)
您应该只在调用方法中关闭InputStream。无论何时使用与输入或输出流相关的任何操作,都使用Try Catch块,如果任何流保持打开状态,它将由java处理
答案 4 :(得分:0)
类DataInputStream
实现Coseable
和AutoClose
接口,因此类close
中的方法DataInputStream
关闭此输入流并释放与此关联的任何系统资源流。此方法只执行in.close()
。
在接口Closeable
中通过关闭指定,在接口AutoCloseable
中关闭覆盖类InputStream
中的关闭。
抛出:
IOException
- 如果发生I / O错误。