IO:PipedInputStream & PipedOutputStream(管道字节输入输出)

博客介绍了管道流,其主要用于线程之间交互,目的地为线程。管道输入流可从管道输出流读取数据,通常一个线程向管道输出流写数据,另一个线程从管道输入流读数据,实现线程间通信,还提及了PipedInputStream和PipedOutputStream在不同线程的读写功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

※目的地

管道流:主要用于线程之间交互
目的地:线程

管道输入流从一个管理输出流中读取数据。通常由一个线程向管理输出流写数据,由另一个线程从管理输入流中读取数据,两个线程可以用管理来通信。

※ PipedInputStream 从管道中读出数据(线程)

这里写图片描述
这里写图片描述

package com.briup.IO;

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

public class PipedStreamTest {
    public static void main(String[] args) {
        PipedOutputStream pos=new PipedOutputStream();
        try {
//          PipedInputStream pis=new PipedInputStream();
//          pis.connect(pos);
            PipedInputStream pis=new PipedInputStream(pos);
            Thread t=new MyPipedRead("1号:",pis);
            Thread t1=new MyPipedWriter("2号:",pos);
            t.start();
            t1.start();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
class MyPipedRead extends Thread{
    //负责从管道中读取消息的
    private PipedInputStream pis;
    private boolean flag;
    public MyPipedRead(String name,PipedInputStream pis) {
        super(name);
        this.pis=pis;
    }
    @Override
    public void run() {
        int len=0;
        try {
            while(!flag){
                len=pis.read();
                if(len==38){
                    break;
                }
                System.out.println(getName()+":"+len);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
class MyPipedWriter extends Thread{
    //向管道写消息(字节)
    private PipedOutputStream pos;

    public MyPipedWriter(String name,PipedOutputStream pos) {
        super(name);
        this.pos=pos;
    }
    @Override
    public void run() {
        byte[] b="hello world&".getBytes();
        try {
            for(byte bx:b){
                pos.write(bx);
                pos.flush();
                Thread.sleep(1000);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

※ PipedOutputStream 向管道只能写出数据(线程)

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值