管道流

package piped.cn;

import java.io.IOException;

/*
 * 管道流:可以进行两个线程之间的通信
 * 管道输出流:PipedOutputStream
 * 管道输入流  类 PipedInputStream
 * 要实现管道输出,则必须将输出流连接在输入流上
 * 
 */
/*   管道输出流:PipedOutputStream
 * 构造方法:
 * PipedOutputStream() 
          创建尚未连接到管道输入流的管道输出流。
         主要 方法:
          void    close() 
          关闭此管道输出流并释放与此流有关的所有系统资源。
 void    connect(PipedInputStream snk) 
          将此管道输出流连接到接收者。
 void    flush() 
          刷新此输出流并强制写出所有缓冲的输出字节。
 void    write(byte[] b, int off, int len) 
          将 len 字节从初始偏移量为 off 的指定 byte 数组写入该管道输出流。
 void    write(int b) 
          将指定 byte 写入传送的输出流。
          
 * 
 */
/*   管道输入流  类 PipedInputStream
 * 构造方法:
 * PipedInputStream() 
          创建尚未连接的 PipedInputStream。
          主要的方法:
           int    available() 
          返回可以不受阻塞地从此输入流中读取的字节数。
 void    close() 
          关闭此管道输入流并释放与该流相关的所有系统资源。
 void    connect(PipedOutputStream src) 
          使此管道输入流连接到管道输出流 src。
 int    read() 
          读取此管道输入流中的下一个数据字节。
 int    read(byte[] b, int off, int len) 
          将最多 len 个数据字节从此管道输入流读入 byte 数组。
protected  void    receive(int b) 
          接收数据字节。
 * 
 */


public class PipedDemo {
    public static void main(String[] args) {
        //创建 send receive 对象
        Send s = new Send();
        Receive  r = new Receive ();
        //使用 PipedOutputStream 中的 void    connect(PipedInputStream snk) 方法连接
        try {
            s.getPost().connect(r.gitPis());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //开启线程
        new Thread(s).start();
        new Thread(r).start();
    }

}
package piped.cn;

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

class Receive implements Runnable {
    //通过构造函数实例化 管道流输入对象
    PipedInputStream pis = null;
    //通过构造方法 实例化对象
    public Receive(){
      pis = new PipedInputStream();
    }
    public void run(){
        //开辟一个存储空间
        byte[] by = new byte[1024];
        int len = 0 ;
      try {
        len =  pis.read(by);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
        try {
            pis.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("输出的内容为:"+new String(by,0,len));
        
    }
    //创建获得线程接收类
    public PipedInputStream gitPis(){
        return this.pis;
    }

}
package piped.cn;

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

//创建一个发送信息的线程
class Send implements Runnable{
    //输出管道流对象
    PipedOutputStream pos = null;
    //通过构造函数实例化 管道流输出对象
    public Send(){
        this.pos = new PipedOutputStream();
    }
  public void run(){
      //定义一个字符串
      String str = "hello wangyuanfang,hahahha";
      try {
          //write()接收的参数类型是byte,所以要转一下
        this.pos.write(str.getBytes());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
      //关闭流
      try {
        this.pos.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
      //通过线程类得到输出流
     
  }
  public PipedOutputStream getPost(){
        return this.pos; 
  }
}

 

posted @ 2017-06-05 14:29  初学者,方圆几里  阅读(377)  评论(0编辑  收藏  举报