熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Javascript >> 正文

Java技巧使用管道數據流傳送數據

2013-11-23 17:54:39  來源: Javascript 

  Java I/O系統是建立在數據流概念之上的在UNIX操作系統中有一個類似的概念很流行那就是管道它具有將一個程序的輸出當作另一個程序的輸入的能力
  
  Java為這種管道概念提供了PipedInputStream和PipedOutputStream類將這兩者結合在一起它們允許一個Java組件輸出數據到輸出流而另一個組件將這個輸出流當作輸入流來讀取
  
  舉個例子可以說明比如一個用來記錄應用程序日志信息的組件和一個用來顯示流數據動態報表的組件通過給日志記錄組件提供PipedOutputStream給報表組件提供相應的PipedInputStream這兩個組件就不用知道對方的情況而可以相互通信
  
  最簡單的情況下代碼段如下所示
  
  importjavaio*;
  
  public class Foo {
  
  static public void main(String[] args) throwsIOException {
  PipedOutputStream pout = newPipedOutputStream();
  PipedInputStream= new PipedInputStream(pout);
  for(int i=; i 〈 ; i++) {
  poutwrite((byte)i );
  }
  poutclose();
  
  int j=;
  while( (j = pinread()) != )
  {
  Systemerrprintln(j);
  }
  pinclose();
  }
  }
  上面的代碼中一定要記得調用close()以關閉輸出流pout否則第二輪循環永遠也不會結束
  
  這個粗泛的例子並不是正常的可用的代碼隨著第一輪循環數量越來越大PipedOutputStream中的緩沖將會用盡從而出現問題比如它在等待某些程序從流裡面刪除數據時會導致線程死鎖
  
  這就是為什麼管道流的Javadoc中聲明了PipedInputStream和PipedOutputStream必須用在多線程環境裡面的原因

From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/25323.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.