考虑以下代码片段getInputStreamForRead()
方法创建并返回一个新的输入流以供读取。
InputStream is = getInputStreamForRead(); //This method creates and returns an input stream for file read
is = getDecompressedStream(is);
由于原始文件内容被压缩和存储,因此必须在读取时解压缩。因此,下面的getDecompressedStream()
方法将提供解压缩流内容的选项
public InputStream getDecompressedStream(InputStream is) throws Exception {
return new GZIPInputStream(is);
}
有以下疑问
对于上述代码段
哪一个是正确的is = getDecompressedStream(is)
或
InputStream newStream = getDecompressedStream(is)
重新使用InputStream
变量会再次造成麻烦吗?
我对溪流全新。请帮助我了解这一点。
答案 0 :(得分:1)
只要:
InputStream
finally
声明中关闭您的信息流...你可以很好地重新分配原始变量 - 它只是传递给现有参考的新值。
事实上,这可能是推荐的方式,因为您只能以编程方式关闭一个Closeable
,GZIPInputStream#close
...
关闭此输入流并释放与该流关联的所有系统资源。
(参见here - 我将其视为"关闭基础流")。
答案 1 :(得分:1)
由于您要正确关闭输入流,最好的方法是使用链接创建输入流,并使用try-with-resources为您处理关闭。
try (InputStream is = getDecompressedStream(getInputStreamForRead())) {
// code using stream here
}