java.io.IOException:使用pipeWriter和pipeReader时显示管道关闭
我正在尝试实现一个解释管道和管线数据流体系结构的程序。 我有一个数据源和许多过滤器,数据源类在管道上写入一个字符数组(使用PipeWriter),第一个过滤器从管道读取数组并将字符转换为大写,然后将大写字符数组写入同一管道,以便下一个过滤器读取,依此类推。 我在应用程序中使用多线程。 下面是一些代码,可以解释我正在尝试执行的操作:java.io.IOException:使用pipeWriter和pipeReader时显示管道关闭,java,multithreading,pipeline,Java,Multithreading,Pipeline,我正在尝试实现一个解释管道和管线数据流体系结构的程序。 我有一个数据源和许多过滤器,数据源类在管道上写入一个字符数组(使用PipeWriter),第一个过滤器从管道读取数组并将字符转换为大写,然后将大写字符数组写入同一管道,以便下一个过滤器读取,依此类推。 我在应用程序中使用多线程。 下面是一些代码,可以解释我正在尝试执行的操作: public class DataSource implements Runnable{ PipedWriter pw; public char[] c
public class DataSource implements Runnable{
PipedWriter pw;
public char[] c = {'e','a','b','c','e','c','a','f','e','d'};
public DataSource(PipedWriter pw){
this.pw = pw;
}
public synchronized void run() {
try {
pw.write(c);
pw.write(-1);
pw.close();
} catch (IOException ex) {
Logger.getLogger(DataSource.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
} 下面是我如何测试代码的:
public static void facadDetails(){
PipedWriter pw = null;
PipedReader pr = null;
try {
// TODO code application logic here
pr = new PipedReader();
pw = new PipedWriter(pr);
DataSource dso = new DataSource(pw);
UpperCaseConversionFilter f1 = new UpperCaseConversionFilter(pr,pw);
new Thread(dso).start();
new Thread(f1).start();
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
谁能帮我解决这个问题 “然后将大写字符数组写入同一管道,以便下一个过滤器读取”-这是错误的。如果写入同一个管道,它将被自身读取(形成无限循环),而不是下一个过滤器
我猜你想要的是:
数据源=>pw1->pr1=>UpperCaseConversionFilter=>pw2->pr2=>next filter
因此,您需要2对或更多(PipedWriter、PipedReader)。我真的需要帮助!!我不知道问题出在哪里,这是我第一次处理PipeReader和Writer:(:(
public static void facadDetails(){
PipedWriter pw = null;
PipedReader pr = null;
try {
// TODO code application logic here
pr = new PipedReader();
pw = new PipedWriter(pr);
DataSource dso = new DataSource(pw);
UpperCaseConversionFilter f1 = new UpperCaseConversionFilter(pr,pw);
new Thread(dso).start();
new Thread(f1).start();
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}