package demo;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
public class PipedIODemo {
public static void main(String[] args) {
SendThread send = new SendThread();
ReceiveThread receive = new ReceiveThread();
try {
send.getOutput().connect(receive.getInput());
} catch (IOException e) {
e.printStackTrace();
}
new Thread(send, "send线程").start();
;
new Thread(receive, "receive线程").start();
}
}
class SendThread implements Runnable {
private PipedOutputStream output;
public SendThread() {
this.output = new PipedOutputStream();
}
public PipedOutputStream getOutput() {
return this.output;
}
public void run() {
for (int i = 0; i < 10; i++) {
try {
this.output.write(("{第"+i+"次消息内容:"+" ,发送方: " + Thread.currentThread().getName()+ "}\n").getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
try {
this.output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class ReceiveThread implements Runnable {
private PipedInputStream input;
public ReceiveThread() {
this.input = new PipedInputStream();
}
public PipedInputStream getInput() {
return input;
}
public void run() {
byte[] buf = new byte[256];
int len = 0;
ByteArrayOutputStream mem = new ByteArrayOutputStream();
try {
while ((len = input.read(buf)) != -1) {
mem.write(buf, 0, len);
}
System.out.println(Thread.currentThread().getName()+"收到消息:" + new String(mem.toByteArray()));
mem.close();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
this.input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?