(IO深入操作)管道流

管道流

管道流的功能是实现两个线程之间的IO操作。

 对于管道流也分为两类:

  • 字节管道流:
  • PipedInputStream:

连接处理:public void connect​(PipedOutputStream src) throws IOException

  • PipedOutputStream:
  • 字符管道流:
  • PipedWriter

连接处理:public void connect​(PipedOutput src) throws IOException

  • PopedWriter

范例:实现管道操作

package IO深入操作;

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

public class 管道流 {
    public static void main(String[] args) {
        SendThread sendThread = new SendThread();
        ReceiveThread receiveThread = new ReceiveThread();
        try {
            sendThread.getOutput().connect(receiveThread.getInput());   //进行管道连接
        } catch (IOException e) {
            e.printStackTrace();
        }
        new Thread(sendThread,"消息发送线程").start();
        new Thread(receiveThread,"消息接收线程").start();
    }
}

class SendThread implements Runnable{
    private PipedOutputStream output;    //管道输出流

    public SendThread(){
        this.output = new PipedOutputStream();  //实例化管道输出流
    }
    @Override
    public void run() {
        for(int x = 0;x < 10;x++){
            try {   //利用管道实现数据发送处理
                this.output.write((Thread.currentThread().getName()+"第"+(x+1)+"次信息\n").getBytes());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        try {
            this.output.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public PipedOutputStream getOutput(){
        return this.output;
    }
}

class ReceiveThread implements Runnable{
    private PipedInputStream input;

    public ReceiveThread(){
        this.input = new PipedInputStream();
    }
    @Override
    public void run(){
        byte[] data = new byte[1024];
            try {
                int len = this.input.read(data);    //保存数据到data并记录长度
                System.out.println(Thread.currentThread().getName()+"接收"+new String(data,0,len));   //输出data
            } catch (IOException e) {
                e.printStackTrace();
            }
        try {
            this.input.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public PipedInputStream getInput(){
        return this.input;
    }
}

消息接收线程接收消息发送线程第1次信息
消息发送线程第2次信息
消息发送线程第3次信息
消息发送线程第4次信息
消息发送线程第5次信息
消息发送线程第6次信息
消息发送线程第7次信息
消息发送线程第8次信息
消息发送线程第9次信息
消息发送线程第10次信息

管道就类似与医院打点滴的效果,一个只负责发送,一个只负责接收,中间靠管道连接。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值