• Java IO之管道简介说明


    转自:

    Java IO之管道简介说明

    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();
    			}
    		}
    	}
    }
  • 相关阅读:
    操作系统入门系列-MIT6.828(操作系统工程)学习笔记(三)---- xv6初探与实验一(Lab: Xv6 and Unix utilities)
    Unity UI Toolkit学习笔记-C# 中创建自定义ui
    Git学习使用笔记--(一)
    客流人数管理新趋势:景区客流采集分析系统的功能特点
    部署Zookeeper集群和Kafka集群
    OSPF邻居关系建立故障排除
    matlab 数据处理 命令集合
    菜鸟入门Docker
    21 | 多线程3
    Square Pair
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/126697642