Java Input Streams有多接近?

时间:2010-10-20 08:29:03

标签: java io stream

在以下代码中:

DataInputStream in = new DataInputStream(
          new BufferedInputStream(new FileInputStream(file)));
in.close();

除了关闭“顶级”流之外,我还需要关闭另外两个流吗?

4 个答案:

答案 0 :(得分:8)

如果您查看DataInputStream的来源,您可以看到它也会关闭基础流。所以你不需要。对于所有类型的流,这都是(或应该)。

答案 1 :(得分:3)

我将利用这个机会回答我之前已经做过的答案。

通过使用Project Lombok,您可以让Lombok正确关闭流。 可以找到详细信息here

答案 2 :(得分:1)

卡拉齐,这是正确的。此外,为了获得想法和更多洞察力,Java IO API实际上是使用装饰器模式实现的。您可以在wiki上查看decorator pattern

答案 3 :(得分:1)

我会在最后一个块中保持关闭,以确保在异常的情况下正确刷新。

public void tryToDoWhatever() throws Exception
{
    DataInputStream in = null;
    try
    {
         in = new DataInputStream(
              new BufferedInputStream(new FileInputStream(file)));
    }
    finally
    { 
        if (in != null)
            in.close();
    }
}