IO输入输出流---管道流

管道流

参考视频:150701【掌握】管道流哔哩哔哩_bilibili

  java本身是属于多线程的编程语言,而多线程和多进程最大的区别在于:一个进程可以产生多个线程,那么这些线程都属于同一个进程中的组成单元,所以这些线程都可以直接共享给定进程里面的所有资源,包括数据,但是在java里面它强调不同的线程有可能也有属于自己的内容,所以不同线程之间也应该利用管道的方式来进行处理,所以为了解决这种管道流的操作,在java.io包中提供有两组类:字节流(PipedOutPutStream和PipedInputStream)、字符流(PipedReader和PipedWriter)。在进行管道的处理时,大多数操作还是都以字节数据为主,所以,以下代码均为字节流管道:(注意:管道流只适用于多线程,单线程将会阻塞导致死锁)

package com.mokuiran.piped;

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

public class Demo {
   public static void main(String[] args) {
       FirstThread first = new FirstThread();//发送数据
       SecondThread second = new SecondThread();//接收数据
       try {
           first.getOutput().connect(second.getInput());
      } catch (IOException e) {
           e.printStackTrace();
      }
       new Thread(first).start();//启动线程
       new Thread(second).start();//启动线程

  }

}
class FirstThread implements Runnable{
   PipedOutputStream out = new PipedOutputStream();//管道输出流
   @Override
   public void run() {
       try {
           this.out.write("我爱中国!!!".getBytes());//将发送的信息转为字节数组
      } catch (IOException e) {
           e.printStackTrace();
      }
  }
   public PipedOutputStream getOutput(){ //通过子类操作,获取管道输出流的对象
       return this.out;
  }
}
class SecondThread implements Runnable{
   PipedInputStream in = new PipedInputStream();//管道输入流
   @Override
   public void run() {
       try {
           byte[] data = new byte[1024];
           int len = this.in.read(data);//接收管道的数据
           System.out.println("接收到的消息:"+new String(data,0,len));
      } catch (IOException e) {
           e.printStackTrace();
      }
  }
   public PipedInputStream getInput(){
       return this.in;
  }
}
 

 

posted @   默夔然  阅读(129)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示