管道输入流 PipedInputStream

系统 1597 0

     管道输入流从一个管道输出流中读取数据。通常由一个线程向管道输出流写数据,由另一个线程从管道输入流中读取数据,两个线程可以用管道来通信。当线程A执行管道输入流的的read()方法时,如果暂时还没有数据,这个线程就会被阻塞,只有当线程B向管道输出流写了新的数据后,线程A才会恢复运行。 下面我们来演示一个例子 

Sender类 
Java代码   收藏代码
  1. package  xiaohang.com;  
  2.   
  3. import  java.io.PipedOutputStream;  
  4.   
  5. /** 向管道输出流写数据的线程 */   
  6. class  Sender  extends  Thread {  
  7.      private  PipedOutputStream out =  new  PipedOutputStream();  
  8.   
  9.      public  PipedOutputStream getPipedOutputStream() {  
  10.          return  out;  
  11.     }  
  12.   
  13.      @Override   
  14.      public   void  run() {  
  15.          try  {  
  16.              for  ( int  i = - 127 ; i <  128 ; i++) {  
  17.                 out.write(i);  
  18.                  // 暂停当前正在执行的线程执行其它线程   
  19.                 yield();  
  20.             }  
  21.              // 关闭此管道输出流并释放与此流有关的所有系统资源 此流可能无法再用于写入字节。   
  22.             out.close();  
  23.         }  catch  (Exception e) {  
  24.              throw   new  RuntimeException(e);  
  25.         }  
  26.     }  
  27. }  


  Receiver类 
Java代码   收藏代码
  1. package  xiaohang.com;  
  2.   
  3. import  java.io.IOException;  
  4. import  java.io.PipedInputStream;  
  5.   
  6. /** 从管道输入流读取数据的线程 */   
  7. public   class  Receiver  extends  Thread {  
  8.      private  PipedInputStream in;  
  9.   
  10.      public  Receiver(Sender sender)  throws  IOException {  
  11.          // 使此管道输入流连接到管道输出流 PipedOutputStream对象 如果此对象已经连接到其他某个管道输出流,则抛出   
  12.          // IOException   
  13.         in =  new  PipedInputStream(sender.getPipedOutputStream());  
  14.     }  
  15.   
  16.      @Override   
  17.      public   void  run() {  
  18.          try  {  
  19.              int  data;  
  20.              while  ((data = in.read()) != - 1 )  
  21.                 System.out.println(data);  
  22.             in.close();  
  23.         }  catch  (Exception e) {  
  24.              throw   new  RuntimeException(e);  
  25.         }  
  26.     }  
  27.   
  28.      public   static   void  main(String args[])  throws  Exception {  
  29.         Sender sender =  new  Sender();  
  30.         Receiver receiver =  new  Receiver(sender);  
  31.         sender.start();  
  32.         receiver.start();  
  33.     }  
  34. }  


   线程Sender向管道输出流中写字节,线程Receiver 从管道输入流中读取字节。线程Sender输出的字节序列与线程 Receiver读入的字节序列相同。

管道输入流 PipedInputStream


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论