java学习笔记 管道流

本文详细介绍了管道流在Java中的应用,包括字节流和字符流的使用方式,通过Sender和Receiver类的代码实例展示了如何实现线程间的数据传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

管道流

管道流主要作用是可以连接两个线程间的通信。管道流也分为字节流(PipedInputStream、PipedOutputStream)与字符流(PipedReader、PipedWriter)两种类型.

一个PipedInputStream 对象必须和一个PipedOutputStream 对象进行连接而产生一个通信管道,PipedOutputStream 可以向管道中写入数据,PipedInputStream 可以从管道中读取 PipedOutputStream 写入的数据。

管道实现线程间通信图解


代码实例:

Sender类:
import java.io.IOException;
import java.io.PipedOutputStream;
 
public class Sender extends Thread
 {
 private PipedOutputStream out =null;
 public PipedOutputStream getOutputStream()
   {
        this.out=new PipedOutputStream();
   return out;         
   }
 
public void run()
    {
        String s = new String("Receiver,你好!");
         try {
                 out.write( s.getBytes() );
                 out.close();
          } catch (IOException e)
           {
                System.out.println( e.getMessage() );
           } 
   }
}
Eeceiver类:
import java.io.IOException;
import java.io.PipedInputStream;
public class Eeceiver extends Thread {
       privatePipedInputStream in = new PipedInputStream();
       publicPipedInputStream getinputStream()
       {
         return in;   
       }
 
       publicvoid run ( )
       {
         String s = null;
         byte [] buf = new byte[1024];
          try {
                      int len = in.read( buf );
                             s= new String( buf,0,len);
                             System.out.println("收到了一下消息:"+s);
                             in.close();
          } catch (IOException e) {
                 System.out.println( e.getMessage() );
               }
       }
}
 
Pipedemo 类:
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
 
public class pipedemo {
 
       publicstatic void main( String args[])
         {
              try{
                     Sendersender = new Sender();
                    
                     Eeceiverreceiver = new Eeceiver();
                     PipedOutputStreamout = sender.getOutputStream();
                     PipedInputStreamin = receiver.getinputStream();
                     out.connect(in);
                     sender.start();
                     receiver.start();
                   } catch (IOException e) {
                     System.out.println(e.getMessage() );
                 }
             
         }
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值