美文网首页Java
Java IO流(管道流)

Java IO流(管道流)

作者: 一亩三分甜 | 来源:发表于2019-10-03 16:00 被阅读0次

    管道流:PipedInputStream和PipedOutputStream输入输出可以直接进行连接,通过结合线程使用。

    import java.io.IOException;
    import java.io.PipedInputStream;
    import java.io.PipedOutputStream;
    
    class Read implements Runnable
    {
        private PipedInputStream in;
        Read(PipedInputStream in)
        {
            this.in = in;
        }
        public void run()
        {
            try
            {
                byte[] buf = new byte[1024];
                int len = in.read(buf);
                String s = new String(buf,0,len);
                System.out.println(s);
                in.close();
    
            }catch (IOException e)
            {
                throw new RuntimeException("管道流读取失败");
            }
        }
    }
    class Write implements Runnable
    {
        private PipedOutputStream out;
        Write(PipedOutputStream out)
        {
            this.out = out;
        }
        public void run()
        {
            try
            {
                out.write("piped lai la".getBytes());
                out.close();
            }catch (IOException e)
            {
                throw new RuntimeException("管道读取流失败");
            }
        }
    }
    public class PipedStreamDemo {
        public static void main(String[] args) throws IOException
        {
           PipedInputStream in = new PipedInputStream();
           PipedOutputStream out = new PipedOutputStream();
           in.connect(out);
           Read r = new Read(in);
           Write w = new Write(out);
           new Thread(r).start();
           new Thread(w).start();
        }
    }
    //输出
    piped lai la
    
    import java.io.IOException;
    import java.io.PipedInputStream;
    import java.io.PipedOutputStream;
    
    class Read implements Runnable
    {
        private PipedInputStream in;
        Read(PipedInputStream in)
        {
            this.in = in;
        }
        public void run()
        {
            try
            {
                byte[] buf = new byte[1024];
                System.out.println("读取前。。。没有数据阻塞");
                int len = in.read(buf);
                System.out.println("读到数据。。。阻塞结束");
                String s = new String(buf,0,len);
                System.out.println(s);
                in.close();
    
            }catch (IOException e)
            {
                throw new RuntimeException("管道流读取失败");
            }
        }
    }
    class Write implements Runnable
    {
        private PipedOutputStream out;
        Write(PipedOutputStream out)
        {
            this.out = out;
        }
        public void run()
        {
            try
            {
                System.out.println("开始写入数据,等待6秒后。");
                Thread.sleep(6000);
                out.write("piped lai la".getBytes());
                out.close();
            }catch (IOException e)
            {
                throw new RuntimeException("管道读取流失败");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    public class PipedStreamDemo {
        public static void main(String[] args) throws IOException
        {
           PipedInputStream in = new PipedInputStream();
           PipedOutputStream out = new PipedOutputStream();
           in.connect(out);
           Read r = new Read(in);
           Write w = new Write(out);
           new Thread(r).start();
           new Thread(w).start();
        }
    }
    //输出
    读取前。。。没有数据阻塞
    开始写入数据,等待6秒后。
    读到数据。。。阻塞结束
    piped lai la
    

    相关文章

      网友评论

        本文标题:Java IO流(管道流)

        本文链接:https://www.haomeiwen.com/subject/rkbdpctx.html