2
在什麼情況下讀取結束可以在對夫婦PipedOutputStream
和PipedInputStream
死?我沒有關閉任何管道。IOException:讀取結束死亡
在什麼情況下讀取結束可以在對夫婦PipedOutputStream
和PipedInputStream
死?我沒有關閉任何管道。IOException:讀取結束死亡
我在代碼中遇到了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 {
}
}
}