• 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();
    			}
    		}
    	}
    }
  • 相关阅读:
    Docker常用命令
    flutter架构全面解析
    计算机毕业设计django+hadoop+scrapy租房可视化 租房推荐系统 租房大屏可视化 租房爬虫 spark 58同城租房爬虫 房源推荐系统
    论文阅读-基于低秩分解的网络异常检测综述
    OpenGL之顶点数组、缓冲区对象、显示列表
    UE4 UltraDynamicSky 天气与水体交互
    Kamiya丨Kamiya艾美捷人β2-微球蛋白ELISA说明书
    QT/自定义槽和信号
    【Docker仓库】使用华为云SWR容器镜像仓库服务
    lua基础之io
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/126697642