为什么我根本无法让 pipedinput/outputstreams 工作
Why can I simply not get pipedinput/outputstreams to work
我正在尝试自己弄清楚 PipedInputStream 和 PipedOutputStream 如何协同工作。至此结果是彻底失败。
这是我的代码:
import java.io.*;
public class Test implements Runnable {
private PipedOutputStream pause_breaker;
private PipedInputStream pause_breaker_listener;
private BufferedReader br;
private PrintWriter pw;
public void run() {
try {
while(true) {
System.out.println("Now listening...");
String text = br.readLine();
System.out.println("...got " + text);
}
} catch(Exception e) {
System.out.println("run: " + e.getMessage());
}
}
public void pause_test() {
try {
// testing piped streams as pausing tool
pause_breaker = new PipedOutputStream();
pause_breaker_listener = new PipedInputStream();
pause_breaker_listener.connect(pause_breaker);
//pause_breaker.connect(pause_breaker_listener);
br = new BufferedReader(new InputStreamReader(pause_breaker_listener));
pw = new PrintWriter(pause_breaker);
Thread.sleep(1000);
new Thread(this).start();
System.out.println("Waiting for new Thread...");
//Thread.sleep(1000);
System.out.println("Writing to stream...");
pw.write("Test");
pw.flush();
} catch(Exception e) {
System.out.println("pause_test: " + e.getMessage());
}
}
public static void main(String[] args) {
Test t2 = new Test();
t2.pause_test();
}
}
输出是这样的:
$ java Test
Waiting for new Thread...
Writing to stream...
Now listening...
run: Write end dead
似乎什么都没有通过。谁能告诉我为什么?
/dr_xemacs
你有两个问题:
由于您使用 BufferedReader 从管道中获取项目,因此每个项目都需要有尾随换行符
您需要修改线程传达退出时间的方式。 reader 线程有一个无限循环,而 writer 线程在写完一行后立即终止,所以 reader 线程抛出 IOException: pipe broken
.
我正在尝试自己弄清楚 PipedInputStream 和 PipedOutputStream 如何协同工作。至此结果是彻底失败。
这是我的代码:
import java.io.*;
public class Test implements Runnable {
private PipedOutputStream pause_breaker;
private PipedInputStream pause_breaker_listener;
private BufferedReader br;
private PrintWriter pw;
public void run() {
try {
while(true) {
System.out.println("Now listening...");
String text = br.readLine();
System.out.println("...got " + text);
}
} catch(Exception e) {
System.out.println("run: " + e.getMessage());
}
}
public void pause_test() {
try {
// testing piped streams as pausing tool
pause_breaker = new PipedOutputStream();
pause_breaker_listener = new PipedInputStream();
pause_breaker_listener.connect(pause_breaker);
//pause_breaker.connect(pause_breaker_listener);
br = new BufferedReader(new InputStreamReader(pause_breaker_listener));
pw = new PrintWriter(pause_breaker);
Thread.sleep(1000);
new Thread(this).start();
System.out.println("Waiting for new Thread...");
//Thread.sleep(1000);
System.out.println("Writing to stream...");
pw.write("Test");
pw.flush();
} catch(Exception e) {
System.out.println("pause_test: " + e.getMessage());
}
}
public static void main(String[] args) {
Test t2 = new Test();
t2.pause_test();
}
}
输出是这样的:
$ java Test
Waiting for new Thread...
Writing to stream...
Now listening...
run: Write end dead
似乎什么都没有通过。谁能告诉我为什么?
/dr_xemacs
你有两个问题:
由于您使用 BufferedReader 从管道中获取项目,因此每个项目都需要有尾随换行符
您需要修改线程传达退出时间的方式。 reader 线程有一个无限循环,而 writer 线程在写完一行后立即终止,所以 reader 线程抛出
IOException: pipe broken
.