• 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();
               }
           }
        }
    }
  • 相关阅读:
    设计模式--17、建造者模式
    设计模式--16、原型模式
    面向对象的几大设计原则
    设计模式--15、模板方法模式
    设计模式--14、中介者模式
    设计模式--13、享元模式
    设计模式--12、外观模式
    设计模式--11、命令模式
    消息中间件ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ、Kafka如何选型?
    Kafka,Mq,Redis作为消息队列有何差异?
  • 原文地址:https://www.cnblogs.com/musong1998/p/12606813.html
Copyright © 2020-2023  润新知