重用输入流变量

时间:2016-07-13 15:28:43

标签: java stream inputstream

考虑以下代码片段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);
}

有以下疑问

  1. 对于上述代码段

    哪一个是正确的
    is = getDecompressedStream(is) 
    

    InputStream newStream = getDecompressedStream(is)
    
  2. 重新使用InputStream变量会再次造成麻烦吗?

  3. 我对溪流全新。请帮助我了解这一点。

2 个答案:

答案 0 :(得分:1)

只要:

  • 您没有操纵原始作业与新作业之间的原始InputStream
  • 您始终在finally声明中关闭您的信息流

...你可以很好地重新分配原始变量 - 它只是传递给现有参考的新值。

事实上,这可能是推荐的方式,因为您只能以编程方式关闭一个CloseableGZIPInputStream#close ...

  

关闭此输入流并释放与该流关联的所有系统资源。

(参见here - 我将其视为"关闭基础流")。

答案 1 :(得分:1)

由于您要正确关闭输入流,最好的方法是使用链接创建输入流,并使用try-with-resources为您处理关闭。

try (InputStream is = getDecompressedStream(getInputStreamForRead())) {
    // code using stream here
}