JavaIO流学习总结-PipedOutputStream和PipedInputStream基本操作练习

package io;
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
/**
 * 修改日期:2020/03/31
 * 修改人:牟松
 * PipedOutputStream和PipedInputStream基本操作练习
 * 管道流实现了两个线程之间的通信,多线程之间传输数据需要通信时可以用到管道流
 * 参考连接:https://blog.csdn.net/qq_24434671/article/details/90206417 
**/
public class PipdTest {
public static void main(String[] args) throws IOException {
      // 创建一个发送者对象
      Sender sender = new Sender();
      // 创建一个接收者对象
      Receiver receiver = new Receiver();
      // 获取输出管道流
      PipedOutputStream outputStream = sender.getOutputStream();
      // 获取输入管道流
      PipedInputStream inputStream = receiver.getInputStream();
     // 链接两个管道,这一步很重要,把输入流和输出流联通起来
      outputStream.connect(inputStream);
     // 启动发送者线程
      sender.start();
     // 启动接收者线程
      receiver.start();
   }
}
/**
 * 发送线程
 * @author yuxuan
 */
class Sender extends Thread {
     //声明一个 管道输出流对象 作为发送方
     private PipedOutputStream outputStream = new PipedOutputStream();
     public PipedOutputStream getOutputStream() {
         return outputStream;
     }
 
   @Override
   public void run() {
       String msg = "Hello World";
       try {
           outputStream.write(msg.getBytes());
       } catch (IOException e) {
             e.printStackTrace();
       } finally {
           try {
           // 关闭输出流
               outputStream.close();
           } catch (IOException e) {
               e.printStackTrace();
           }
      }
   }
}
 
/**
 * 接收线程
 * @author yuxuan
 */
class Receiver extends Thread {
     // 声明一个 管道输入对象 作为接收方
     private PipedInputStream inputStream = new PipedInputStream();
     public PipedInputStream getInputStream() {
          return inputStream;
     }
 
     @Override
     public void run() {
         byte[] buf = new byte[1024];
         try {
             // 通过read方法 读取长度
             int len = inputStream.read(buf);
             System.out.println(new String(buf, 0, len));
         } catch (IOException e) {
             e.printStackTrace();
         } finally {
            try {
             // 关闭输入流
             inputStream.close();
           } catch (IOException e) {
              e.printStackTrace();
           }
       }
    }
}
posted @ 2020-03-31 17:43  一个吃螃蟹的人  阅读(227)  评论(0编辑  收藏  举报