关键词搜索

源码搜索 ×
×

(Java)管道流

发布2020-02-09浏览970次

详情内容

管道流的主要作用是可以进行两个线程间的通信,分为管道输出流(PipedOutputStream)和管道输入流(PipedInputStream)
在这里插入图片描述
如图,如果要进行管道输出,则必须把输出流连在输入流上,在 PipedOutputStream 类上有此方法用于连接管道:

public void connect(PipedInputSteam snk) throws IOException
    import java.io.IOException;
    import java.io.PipedInputStream;
    import java.io.PipedOutputStream;
    
    class Send implements Runnable{//实现  Runnable 接口
        private PipedOutputStream pos = null;//管道输出流
        public Send(){
            this.pos = new PipedOutputStream();//实例化输出流
        }
        public void run(){
            String str = "Hello World !!!";
            try{
                this.pos.write(str.getBytes());//输出信息
            }catch (IOException e){
                e.printStackTrace();
            }
            try{
                this.pos.close();//关闭输出流
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    
        public PipedOutputStream getPos() {//通过线程类得到输出流
            return pos;
        }
    }
    class Receive implements Runnable{//实例化 Runnable 接口
        private PipedInputStream pis = null;
        public Receive(){
            this.pis = new PipedInputStream();//实例化输入流
        }
        public void run(){
            byte b[] = new byte[1024];
            int len = 0;
            try{
                len = this.pis.read(b);//接收数据
            }catch (IOException e){
                e.printStackTrace();
            }
            try {
                this.pis.close();
            }catch (IOException e){
                e.printStackTrace();
            }
            System.out.println("接收的内容为:" + new String(b,0,len));
        }
    
        public PipedInputStream getPis() {
            return pis;
        }
    
    }
    public class Test{
        public static void main(String[] args) {
            Send s = new Send();
            Receive r = new Receive();
            try {
                s.getPos().connect(r.getPis());//连接管道
            }catch (IOException e){
                e.printStackTrace();
            }
            new Thread(s).start();//启动线程
            new Thread(r).start();//启动线程
        }
    
    }
    
      2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载