前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[javaSE] IO流(管道流)

[javaSE] IO流(管道流)

作者头像
唯一Chat
发布2019-09-10 16:05:20
5770
发布2019-09-10 16:05:20
举报
文章被收录于专栏:陶士涵的菜地陶士涵的菜地

之前我们使用io流,都是需要一个中间数组,管道流可以直接输入流对接输出流,一般和多线程配合使用,当读取流中没数据时会阻塞当前的线程,对其他线程没有影响

定义一个类Read实现Runable接口,实现run()方法,构造方法传递PipedInputStream对象

读取流里面的数据

定义一个类Write实现Runable接口,实现run()方法,构造方法传递PipedOutputStream对象

写入流里面数据

获取PipedInputStream对象,new出来

获取PipedOutputStream对象,new出来

调用PipedInputStream对象的connect()方法,对接输出流,参数:PipedOutputStream对象

开启两个线程执行读写

代码语言:javascript
复制
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
/**
 * 读取数据线程
 * @author taoshihan
 *
 */
class ReadPipe implements Runnable{
    private PipedInputStream in;
    public ReadPipe(PipedInputStream in) {
        this.in=in;
    }
    @Override
    public void run() {
        System.out.println("开始读取。。。如果没有数据会阻塞");
        byte[] b=new byte[1024];
        try {
            int len=in.read(b);
            String info=new String(b,0,len);
            in.close();
            System.out.println(info);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
}
/**
 * 写入数据线程
 * @author taoshihan
 *
 */
class WritePipe implements Runnable{
    private PipedOutputStream out;
    public WritePipe(PipedOutputStream out) {
        this.out=out;
    }
    @Override
    public void run() {
        System.out.println("开始写入。。。延迟5秒");
        try {
            Thread.sleep(5000);
            out.write("我是数据".getBytes());
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }
    
}
public class PipeDemo {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        //连接管道
        PipedInputStream in=new PipedInputStream();
        PipedOutputStream out=new PipedOutputStream();
        in.connect(out);
        //开启线程
        new Thread(new ReadPipe(in)).start();
        new Thread(new WritePipe(out)).start();
    }

}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-06-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档