如果我关闭ObjectOuputStream,那么不需要关闭FileOutputStream?

时间:2014-02-03 11:41:06

标签: java memory file-io fileoutputstream objectoutputstream

我的代码如下。

Map<String, String> aMap = new HashMap();
aMap.put("A", "a");
FileOutputStream fos = new FileOutputStream(new File("some.txt"));
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.write(aMap);
oos.flush();
oos.close();

我认为我需要关闭fos,但其他人说它很好。 不关闭FileOutputStream是否真的很好,因为我已经关闭了内部OutputStream?

4 个答案:

答案 0 :(得分:3)

是的,您无需单独关闭它。如果您关闭oos,它也会在内部关闭fos。关闭最外面的流将把它一直委托给

答案 1 :(得分:1)

No你不需要关闭FileOutputStream。 如果您检查close()的代码,您会发现它关闭了输出流。

Plz查看文档http://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html

答案 2 :(得分:0)

这是Java中的一般规则:如果你有几个链式/嵌套流,请说
outStream3(outStream2(outStream1))(我只是用伪代码写这个)你 通常只需要关闭最外面的流 - 在这种情况下是outStream3 当您在outStream3上致电关闭时,它会在outStream2上拨打关闭 它将在outStream1上调用close。这条规则有一些例外,但是 这是你能记住的一般规则。

答案 3 :(得分:0)

您不需要明确地执行此操作,它将自动完成。看一下javadoc的例子:

FileOutputStream fos = new FileOutputStream("t.tmp");
  ObjectOutputStream oos = new ObjectOutputStream(fos);

  oos.writeInt(12345);
  oos.writeObject("Today");
  oos.writeObject(new Date());

  oos.close();

可在此处找到该链接:Class ObjectOutputStream