跟我学IO(PipedInputStream和PipedOutputStream)

管道流用于线程间的通信。一个线程的PipedInputStream对象从另外一个线程的PipedOutputStream对象读取输入。要使管道流有用,必须同时构造管道输入流和管道输出流。

管道流用于线程间的通信。一个线程的PipedInputStream对象从另外一个线程的PipedOutputStream对象读取输入。要使管道流有用,必须同时构造管道输入流和管道输出流。

例如:建立两个线程,一个用于向管道流写入数据,另一个从管道流读取数据。代码如下:

package io.stream;

import java.io.PipedInputStream;
import java.io.PipedOutputStream;

public class PipedInputOutputStreamTest {

	public static void main(String[] args) {
		try {
			// 定义管道流
			PipedInputStream input = new PipedInputStream();
			PipedOutputStream output = new PipedOutputStream();
			
			// 连接管道
			output.connect(input);
			
			// 启动线程
			(new PipedOutputThread(output)).start();
			(new PipedInputThread(input)).start();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
}

class PipedInputThread extends Thread {
	private PipedInputStream input;
	
	public PipedInputThread(PipedInputStream input) {
		this.input = input;
	}
	
	@Override
	public void run() {
		try {
			// 从管道中读取数据
			byte[] buffer = new byte[2048];
			int len = input.read(buffer);
			System.out.println( new String(buffer, 0, len) );
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
}

class PipedOutputThread extends Thread {
	private PipedOutputStream output;
	
	public PipedOutputThread(PipedOutputStream output) {
		this.output = output;
	}
	
	@Override
	public void run() {
		try {
			String buf = "PipedOutputThread向管道写入数据";
			output.write( buf.getBytes() );
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
}
一个不注意小事情的人,永远不会成功大事业。——戴尔·卡耐基
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号