[英]If I close ObjectOuputStream, then do not need to close FileOutputStream?
我的代碼如下。
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,但是其他人說很好。 因為我已經關閉了內部OutputStream,所以不關閉FileOutputStream真的好嗎?
是的,您不需要單獨關閉它。 如果您關閉oos
,它也會在內部同時關閉fos
。 關閉最外面的流將一直將其委派
No
您不需要關閉FileOutputStream。 如果檢查close()
的代碼,您會發現它關閉了輸出流。
請參閱文檔http://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html
這是Java中的一般規則:如果您有多個鏈接/嵌套的流,請說
outStream3(outStream2(outStream1))
(我只是用偽代碼編寫)
通常只需要關閉最外面的流-在這種情況下,即outStream3
。
在內部,當您在outStream3
上調用close時,它將在outStream2
上調用close
這將在outStream1
上調用close。 此規則有一些例外,但是
這是您可以記住的一般規則。
您無需明確地執行此操作,它將自動完成。 看一下javadoc中的示例:
FileOutputStream fos = new FileOutputStream("t.tmp");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeInt(12345);
oos.writeObject("Today");
oos.writeObject(new Date());
oos.close();
鏈接可以在這里找到: 類ObjectOutputStream
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.