Java IO之管道简介说明

java-教程王 Java教程 发布时间:2021-10-11 23:11:20 阅读数:3870 1

Java IO管道的功能说明

Java IO中管道可以为同一个JVM中两个线程提供通信操作
----------------------------------------------------
注意事项:
    1.IO管道不能为不同的JVM提供通信,也不可以为不同的进程之间提供通信,
    2.Java IO管道的通信两端必须处于同一个进程中的不同线程上

Java IO创建管道

Java IO中创建管道的方法:
      在Java IO中使用PipedOutputStream和PipedInputStream创建管道
       一个PipedInputStream流应同一个PipedOutputStream流关联
	   一个线程通过PipedOutputStream写入的数据可以被另一个线程通过相关联的PipedInputStream读取出来

Java IO管道

package com.java265.other;

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

public class Test {

	/*
	 * java265.com PipedOutputStream 示例分享
	 */
	public static void main(String[] args) throws IOException {

		// 创建一个发送者对象
		Sender sender = new Sender();
		// 创建一个接收者对象
		Receiver receiver = new Receiver();
		// 获取输出管道流
		PipedOutputStream outputStream = sender.getOutputStream();
		// 获取输入管道流
		PipedInputStream inputStream = receiver.getInputStream();
		// 链接两个管道,这一步很重要,把输入流和输出流联通起来
		outputStream.connect(inputStream);
		// 启动发送者线程
		sender.start();
		// 启动接收者线程
		receiver.start();
	}
}

/**
 * 发送线程
 */
class Sender extends Thread {

	// 声明一个 管道输出流对象 作为发送方
	private PipedOutputStream outputStream = new PipedOutputStream();

	public PipedOutputStream getOutputStream() {
		return outputStream;
	}

	@Override
	public void run() {
		String msg = "this is java265.com";
		try {
			outputStream.write(msg.getBytes());
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				// 关闭输出流
				outputStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

/**
 * 接收线程
 */
class Receiver extends Thread {

	// 声明一个 管道输入对象 作为接收方
	private PipedInputStream inputStream = new PipedInputStream();

	public PipedInputStream getInputStream() {
		return inputStream;
	}

	@Override
	public void run() {
		byte[] buf = new byte[1024];
		try {
			// 通过read方法 读取长度
			int len = inputStream.read(buf);
			System.out.println(new String(buf, 0, len));
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				// 关闭输入流
				inputStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaCourse/202110/1428.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者