2012-04-05 36 views

回答

3

我在代碼中遇到了java.io.IOException: Read end dead,發現原因。在下面發佈示例代碼。如果您運行代碼,您將得到「讀取結束死亡」異常。如果仔細觀察,消費者線程會從流中讀取「hello」並終止;同時製片人睡了2秒鐘,試圖寫出「世界」但失敗。一個相關的問題在這裏解釋:http://techtavern.wordpress.com/2008/07/16/whats-this-ioexception-write-end-dead/

class ReadEnd { 
public static void main(String[] args) { 
    final PipedInputStream in = new PipedInputStream(); 
    new Thread(new Runnable() { //consumer 
     @Override 
     public void run() { 
      try { 
       byte[] tmp = new byte[1024]; 
       while (in.available() > 0) {   // only once... 
        int i = in.read(tmp, 0, 1024); 
        if (i < 0) 
         break; 
        System.out.print(new String(tmp, 0, i)); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } finally { 

      } 
     } 
    }).start(); 
    PipedOutputStream out = null; 
    try { 

     out = new PipedOutputStream(in); 
     out.write("hello".getBytes()); 
     Thread.sleep(2 * 1000); 
     out.write(" world".getBytes()); //Exception thrown here 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } finally { 
    } 
} 

}