本文共 1668 字,大约阅读时间需要 5 分钟。
//io流-多线程连接管道流import java.io.*;class Read implements Runnable//implements Runnable 实现Runnable接口 管道流必须使用多线程,因为PipedInputStream是进程阻塞方法{ private PipedInputStream in;//管道流一生成就要存在 Read(PipedInputStream in)//构造器 { this.in = in; } public void run()//实现Runnable接口 就必须 重写run()方法 { try { byte[] buf = new byte[1024]; System.out.println("读取前,没有数据就阻塞"); int len = in.read(buf);//int read(byte[] b) System.out.println("读到数据,阻塞结束"); //从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。 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);//释放执行权6秒 out.write("piped lai la".getBytes());//getBytes()是将一个字符串转化为一个字节数组 out.close(); } catch (IOException e) { throw new RuntimeException("管道输出流失败"); } }}class PipedStreamDemo { public static void main(String[] args) throws IOException { PipedInputStream in = new PipedInputStream(); PipedOutputStream out = new PipedOutputStream(); in.connect(out);//管道in 和 out 进行连接 Read r = new Read(in);//线程对象 传入 管道流 Write w = new Write(out);//线程对象 传入 管道流 new Thread(r).start();//开启新线程 new Thread(w).start();//开启新线程 }}
转载地址:http://wzzvb.baihongyu.com/