日期:2014-05-20  浏览次数:20642 次

多线程管道通信 PipedInputStream抛出IOException "write end dead"异常 怎么解决?在线等
想在Thread A中,利用PipedOutputStream写入数据
在Thread B中,循环读取数据
只要 Thread A写数据了,线程B就读

Thread A
负责接收user 输入
并用 管道 ,将 数据发送给 Thread B


Thread B
读取Thread A传来的数据
while(true)
{
  byte[] bytes = new byte[100];
  int bytesLength=input.read(bytes); //这里第2次会抛出异常..
  String srcStr=new String(bytes,0,bytesLength);
}

可在 Thread B中,
循环第1次 能够正确读取信息
循环第2次 抛出了 IOException

并且提示
write end dead

不知道什么原因?

------解决方案--------------------

if (writeSide != null && !writeSide.isAlive()&& !closedByWriter && (in < 0)) {   
            throw new IOException("Write end dead");   
        }   

你那个Write end dead来自这里
------解决方案--------------------
你把程序发一下 可以测测 这样怎么知道哪错了
------解决方案--------------------
可能的原因是 你第二次循环时 写的那一方还没有发送数据吧?
抛这个异常的原因是 写的那一端 不存在了,或未激活