雖然學習Java,我發現(急忙在我的代碼中使用)下面的代碼模式從JDK:格式化程序如何與BufferedWriter協作而不關閉?
public Formatter(OutputStream os, String csn, Locale l)
throws UnsupportedEncodingException
{
this(l, new BufferedWriter(new OutputStreamWriter(os, csn)));
}
它通過一個新創建的BufferedWriter
到other constructor指它作爲一個Appendable
接口(使之不能進一步刷新或關閉在Formatter
實現):
private Formatter(Locale l, Appendable a) {
this.a = a;
this.l = l;
this.zero = getZero(l);
}
經過一番思考和挖掘出BufferedWriter
代碼,我不明白如何能正常工作 - 從BufferedWriter
代碼它看起來像它會失去緩衝的數據,如果沒有完成時關閉。 Finalize
方法似乎不被使用。 Formatter
類中有許多其他構造函數,它們以類似的方式使用BufferedWriter
(主要是封裝輸出流和文件)。那麼緩衝區沖洗如何在這個代碼中工作?或者這是JDK中的一堆bug(這對我來說聽起來令人難以置信,因爲它是非常基本的和舊的功能)?
謝謝,現在我明白了。我的印象是,如果我們僅通過Appendable接口存儲引用,那麼我們無法在其上調用close()。完全忘了關於instanceof魔法和類型鑄造的可能性。 – vagran