[英]drain() vs flush() in ObjectOutputStream Class in Java
當我看到如下有關這兩種方法的描述時,我對此感到有些困惑。
protected void drain()
:類似於沖洗,但是不會將沖洗傳播到基礎流。
void flush()
:寫入所有緩沖的輸出字節並刷新到基礎流。
例如:
FileOutputStream out = new FileOutputStream("test.txt");
ObjectOutputStream oout = new ObjectOutputStream(out);
問題1:
如果我調用oout.flush()
,它將強制將ObjectOutputStream中的輸出數據寫入基礎FileOutputStream中,但不能保證隨后將這些數據從FileOutputStream中寫入文件“ test.txt”中。磁盤,因為我不調用out.flush()
,這是正確的嗎?
問題2:
如果我叫oout.drain()
怎么辦?
刷新會將數據寫入test.txt。 但是,排出類似於沖洗,但不會將沖洗傳播到基礎流。
問題1:
如果我調用
oout.flush(),
它將強制將ObjectOutputStream
的輸出數據寫入基礎FileOutputStream,
但不能保證隨后將這些數據從FileOutputStream
寫入文件“ test.txt”中磁盤,因為我不調用out.flush()
,對嗎?
不,你錯了。 它確實刷新FileOutputStream
。 但是,由於FileOutputStream
不緩沖或刷新,因此在這種情況下, drain()
和flush()
之間實際上沒有區別。 如果FileOutputStream
周圍有一個BufferedOutputStream
,那將會有所不同。
問題2:
如果我叫
oout.drain()
怎么辦? 將執行什么處決?
它將完全按照Javadoc中的說明刷新ObjectOutputStream
但不刷新基礎流。
您已經設法使它完全回到了前面。 我不明白該怎么做:Javadoc非常清晰。 此外,由於drain()
protected
因此無論如何都與您無關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.