?? java技巧使用管道數據流傳送數據.txt
字號:
Java技巧使用管道數據流傳送數據
(加入日期:2003-5-4 點擊數:2005)
【對此文發(fā)表評論】 【編程愛好者論壇】 【保存文章至硬盤】 【打印文章】
Java I/O系統是建立在數據流概念之上的,在UNIX操作系統中有一個類似的概念很流行,那就是管道,它具有將一個程序的輸出當作另一個程序的輸入的能力。
Java為這種管道概念提供了PipedInputStream和PipedOutputStream類。將這兩者結合在一起,它們允許一個Java組件輸出數據到輸出流,而另一個組件將這個輸出流當作輸入流來讀取。
舉個例子可以說明,比如一個用來記錄應用程序日志信息的組件和一個用來顯示流數據動態(tài)報表的組件。通過給日志記錄組件提供PipedOutputStream,給報表組件提供相應的PipedInputStream,這兩個組件就不用知道對方的情況而可以相互通信。
最簡單的情況下,代碼段如下所示:
importjava.io.*;
public class Foo {
static public void main(String[] args) throwsIOException {
PipedOutputStream pout = newPipedOutputStream();
PipedInputStream= new PipedInputStream(pout);
for(int i=0; i 〈 100; i++) {
pout.write((byte)i );
}
pout.close();
int j=0;
while( (j = pin.read()) != -1)
{
System.err.println(j);
}
pin.close();
}
}
上面的代碼中,一定要記得調用close()以關閉輸出流"pout",否則第二輪循環(huán)永遠也不會結束。
這個粗泛的例子并不是正常的可用的代碼。隨著第一輪循環(huán)數量越來越大,PipedOutputStream中的緩沖將會用盡,從而出現問題,比如它在等待某些程序從流里面刪除數據時會導致線程死鎖。
這就是為什么管道流的Javadoc中聲明了PipedInputStream和PipedOutputStream必須用在多線程環(huán)境里面的原因。
本欄文章均來自于互聯網,版權歸原作者和各發(fā)布網站所有,本站收集這些文章僅供學習參考之用。任何人都不能將這些文章用于商業(yè)或者其他目的。( ProgramFan.Com )
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -