Pipe&Line データ フロー アーキテクチャを説明するプログラムを実装しようとしています。私はデータ ソースと多くのフィルターを持っています。データ ソース クラスはパイプに文字の配列を書き込みます (PipeWriter を使用)。最初のフィルターはパイプから配列を読み取り、文字を大文字に変換してから、大文字の文字の配列を書き込みます。次のフィルターなどで読み取られるように、同じパイプに入れます。アプリケーションでマルチスレッドを使用しています。ここに私がやろうとしていることを説明するかもしれないいくつかのコードがあります:
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 class UpperCaseConversionFilter implements Runnable{
PipedReader pr;
PipedWriter pw;
char[] upperCaseLetters;
public UpperCaseConversionFilter(PipedReader pr,PipedWriter pw){
this.pr = pr;
this.pw = pw;
upperCaseLetters = new char[10];
}
public synchronized void run() {
try {
int i;
int d = 0 ;
while ((i = pr.read()) != -1) {
char y = (char)i;
upperCaseLetters[d] = Character.toUpperCase(y);
d++;
}
pw.write(upperCaseLetters); // here apperas the exception
pw.write(-1);
pw.close();
} catch (IOException ex) {
Logger.getLogger(UpperCaseConversionFilter.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);
}
}
}
これを解決するのを手伝ってくれる人はいますか?!!