利用Java I/O流中的管道流类PipedInputStream和PipedOutputStream可以方便地实现管道-过滤器体系结构,这两个类的实例对象要通过connect方法连接。首先定义测试管道类TestPiped,代码如下:
时间: 2024-09-19 11:06:09 浏览: 46
在Java中,`PipedInputStream`和`PipedOutputStream`是用于创建管道的工具,它们允许在两个线程之间共享数据,就像在一个管道里一样。这种结构特别适合于需要在独立线程之间传递数据的情况,例如生产者-消费者模型或者简单的通信机制。
`TestPiped`类通常会这样设计:
```java
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
public class TestPiped {
private PipedInputStream input;
private PipedOutputStream output;
public TestPiped() throws IOException {
// 创建管道
this.output = new PipedOutputStream();
this.input = new PipedInputStream(output);
// 连接输入和输出流
output.connect(input); // 这里是连接操作
}
// 生产者方法,向管道写入数据
public void sendData(String data) {
try {
output.write(data.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
// 消费者方法,从管道读取数据
public String readData() {
byte[] buffer = new byte[1024];
int bytesRead = -1;
StringBuilder data = new StringBuilder();
while ((bytesRead = input.read(buffer)) != -1) {
data.append(new String(buffer, 0, bytesRead));
}
return data.toString();
}
// 示例中,你可以在一个线程中发送数据,在另一个线程中消费数据
public static void main(String[] args) throws Exception {
TestPiped testPiped = new TestPiped();
new Thread(() -> testPiped.sendData("Hello from producer")).start();
System.out.println(testPiped.readData()); // 在主线程中消费数据
}
}
```
阅读全文