亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java中過濾流的隱式契約是什么?

java中過濾流的隱式契約是什么?

冉冉說 2023-05-17 17:39:25
我正在讀一本書“Java 網絡編程(Elliotte Rusty Harold)”。在這段代碼之后,我遇到了以下句子。FileInputStream fin = new FileInputStream("data.txt"); BufferedInputStream bin = new BufferedInputStream(fin);...混合調用連接到同一源的不同流可能會違反過濾器流的多個隱式合同。而下面的代碼就出來了。InputStream in = new FileInputStream("data.txt"); in = new BufferedInputStream(in);我知道這簡化了語法,但我想知道“過濾器流的幾個隱式合同”是什么意思。
查看完整描述

1 回答

?
qq_笑_17

TA貢獻1818條經驗 獲得超7個贊

如果多個過濾器流連接到同一個源流,那么這些過濾器流可能會以不兼容的方式運行。想象一下,假設有兩個流:

  • BufferedInputStream:包含緩沖區的流過濾器(例如合并讀?。?/p>

  • NoChangeInputStream:在我的例子中,我什至不需要對我的一個過濾器流有特殊的行為。此類僅將所有 I/O 委托給基礎輸入流,不進行過濾。

現在想象運行以下代碼:

InputStream in = new FileInputStream("data.txt");

BufferedInputStream buf = new BufferedInputStream(in);

NoChangeInputStream nop = new NoChangeInputStream(in);

int byte0 = buf.read();

int byte1 = nop.read();

您會期望它byte1包含文件的第二個字節,但這是不正確的。當它BufferedInputStream第一次填充其緩沖區時,消耗的不僅僅是一個字節,因此違反了一個人關于流應該如何表現的典型隱含假設。


到目前為止,這不是唯一的例子——還要考慮兩個不同的緩沖輸入流正在使用同一個輸入文件的情況——不清楚兩個緩沖區中的哪一個會得到任何特定的字節,即使你輸入的順序是從緩沖區讀取是清楚的。


查看完整回答
反對 回復 2023-05-17
  • 1 回答
  • 0 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號