1 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊
如果多個(gè)過濾器流連接到同一個(gè)源流,那么這些過濾器流可能會(huì)以不兼容的方式運(yùn)行。想象一下,假設(shè)有兩個(gè)流:
BufferedInputStream:包含緩沖區(qū)的流過濾器(例如合并讀?。?/p>
NoChangeInputStream:在我的例子中,我什至不需要對(duì)我的一個(gè)過濾器流有特殊的行為。此類僅將所有 I/O 委托給基礎(chǔ)輸入流,不進(jìn)行過濾。
現(xiàn)在想象運(yùn)行以下代碼:
InputStream in = new FileInputStream("data.txt");
BufferedInputStream buf = new BufferedInputStream(in);
NoChangeInputStream nop = new NoChangeInputStream(in);
int byte0 = buf.read();
int byte1 = nop.read();
您會(huì)期望它byte1包含文件的第二個(gè)字節(jié),但這是不正確的。當(dāng)它BufferedInputStream第一次填充其緩沖區(qū)時(shí),消耗的不僅僅是一個(gè)字節(jié),因此違反了一個(gè)人關(guān)于流應(yīng)該如何表現(xiàn)的典型隱含假設(shè)。
到目前為止,這不是唯一的例子——還要考慮兩個(gè)不同的緩沖輸入流正在使用同一個(gè)輸入文件的情況——不清楚兩個(gè)緩沖區(qū)中的哪一個(gè)會(huì)得到任何特定的字節(jié),即使你輸入的順序是從緩沖區(qū)讀取是清楚的。
添加回答
舉報(bào)