管道流

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) {
			// TODO Auto-generated catch block
			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) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		try {
			this.output.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			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) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		try {
			this.input.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

posted @   fighterk  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示