如果我有流(InputStream或OutputStream)我没有创建但是作为参数传递给我的方法,我应该关闭那个流吗?这是一个例子:
void method(InputStream in) {
try {
//Do something
}
finally {
if(in != null) {
in.close(); //Is this needed and correct?
}
}
答案 0 :(得分:3)
真的,“这取决于”。
作为一般规则,您不应该关闭您不负责打开的流,但要给出正确答案,我们必须了解上下文。
责任委托很可能要求您的方法使用和关闭流 - 如果是这种情况,那么它应该在代码中是明确的。
如果您的方法名为readFromStreamAndClose(InputStream in)
,那么您的方法关闭流的事实非常明显。
如果您自己打开流,您可以随时使用try-with-resources
块来为您关闭流 - 与创建时的抽象级别相同。在这种情况下 - 您的方法(在比打开流时更低的级别调用)不应该关闭流。
答案 1 :(得分:0)
我不认为JVM规范对此有任何保证。你真的应该最终关闭这些资源。
当进程结束时,操作系统将释放与其关联的所有资源(包括内存,文件句柄和网络套接字)。
有OS设施可以检查打开的文件和流
答案 2 :(得分:0)
不,你不必这样做,因为它可以在代码中的某个地方使用。
答案 3 :(得分:0)
您使用以下方法记录方法:“关闭流”并将名称方法更改为类似readAndClose。
或者创建一个参数boolean closeStream,如果为true则关闭。
此外,如果流不支持标记/搜索/重置,则没有理由将其保持打开状态。
答案 4 :(得分:0)
通常不建议关闭与该类无关的流。
以下是原因,
该类打开流负责关闭它。