Java中管道报错:Write end dead

编程入门 行业动态 更新时间:2024-10-11 21:22:30

Java中管道<a href=https://www.elefans.com/category/jswz/34/1771188.html style=报错:Write end dead"/>

Java中管道报错:Write end dead

今天看了下关于管道的通信,Java中的管道只能在同一进程的不同线程间通信。今天测试两个线程进行通信发现报错。下面是我测试的代码。

package com.wpl.testIO;import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;public class IoOne {@SuppressWarnings("resource")public static void main(String[] args) throws IOException {final PipedOutputStream outputStream=new PipedOutputStream();final PipedInputStream inputStream=new PipedInputStream(outputStream);Thread t1=new Thread(new Runnable() {@Overridepublic void run() {try {outputStream.write("Hello world".getBytes());//outputStream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});Thread t2=new Thread(new Runnable() {@Overridepublic void run() {try {int count=inputStream.read();while(count!=-1&&outputStream!=null){System.out.print((char) count);count=inputStream.read();}//inputStream.close();} catch (IOException e) {e.printStackTrace();}}});t1.start();t2.start();}}

报错的图片如下。


值能够读出来,但是最后还是会报错,不知道为何,往上看了很多解决办法,也没有用,同时我的输入和输出并没有显示的关闭,而是使用jdk1.7中的try-resources代替显示地调用close方法的方式。后来发现问题就出在这里将代码简单改写下,就没有报错了。

package com.wpl.testIO;import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;public class IoOne {public static void main(String[] args) throws IOException {final PipedOutputStream outputStream=new PipedOutputStream();final PipedInputStream inputStream=new PipedInputStream(outputStream);Thread t1=new Thread(new Runnable() {@Overridepublic void run() {try {outputStream.write("Hello world".getBytes());outputStream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});Thread t2=new Thread(new Runnable() {@Overridepublic void run() {try {int count=inputStream.read();while(count!=-1&&outputStream!=null){System.out.print((char) count);count=inputStream.read();}inputStream.close();} catch (IOException e) {e.printStackTrace();}}});t1.start();t2.start();}}

其实还是资源没有关闭的问题,下次应该注意。

更多推荐

Java中管道报错:Write end dead

本文发布于:2024-03-14 16:58:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1736927.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:报错   管道   Java   Write   dead

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!