在以下代码中:
DataInputStream in = new DataInputStream(
new BufferedInputStream(new FileInputStream(file)));
in.close();
除了关闭“顶级”流之外,我还需要关闭另外两个流吗?
答案 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();
}
}