java基础知识回顾之javaIO类--管道流PipedOutputStream和PipedIutputStream
2023-09-14 08:57:14 时间
管道流(线程通信流):管道流的主要作用是可以进行两个线程间的通讯,分为管道输出流(PipedOutputStream)、管道输入流(PipedInputStream),如果想要进行管道输出,则必须要把输出流连在输入流之上。如图所示:
1.管道输入流应该连接到管道输出流 ,输入流和输出流可以直接连接
2.使用多线程操作,结合线程进行操作。通常由某个线程从管道输入流中(PipedInputStream)对象读取。
并由其他线程将其写入到相应的端到输出流中。不能使用单线程对输入流对象向和输出流对象进行操作,因为会造成 死锁问题。
3.管道流连接:(1)使用构造方法进行连接PipedOutputStream(PipedInputStream snk) 创建连接到指定管道输入流的管道输出流。
(2)public void connect(PipedInputStream snk)throws IOException,使用connect方法进行连接
下面看代码:
package com.lp.ecjtu.io.piped; import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOutputStream; public class PipedDemo { public static void main(String[] args) { PipedOutputStream out = new PipedOutputStream(); PipedInputStream in = new PipedInputStream(); try { out.connect(in); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }//输出管道流连接输入管道流 new Thread(new OutputThread(out)).start(); new Thread(new InputThread(in)).start(); } } class InputThread implements Runnable{ private PipedInputStream in; public InputThread(PipedInputStream in){ this.in = in; } @Override public void run() { // TODO Auto-generated method stub try { byte[] buff = new byte[1024]; int len = in.read(buff); String s = new String(buff,0,len); System.out.println(s); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class OutputThread implements Runnable{ private PipedOutputStream out; public OutputThread(PipedOutputStream out){ this.out = out; } @Override public void run() { String str = "hello Piped!"; try { out.write(str.getBytes()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { if(out != null){ out.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
相关文章
- Java 开发环境配置--eclipse工具进行java开发
- java基础知识回顾之java Socket学习(二)--TCP协议编程
- java基础知识回顾之java Thread类学习(九)--wait和notify区别
- java基础知识回顾之java Thread类学习(七)--java多线程通信等待唤醒机制(wait和notify,notifyAll)
- java基础知识回顾之java Thread类学习(三)--java线程实现常见的两种方式实现好处:
- java基础知识回顾之javaIO类--File类应用:获取指定目录下面的指定扩展名的文件,将文件的绝对路径写入到目的文件当中
- java基础知识回顾之javaIO类--File类
- 你必须知道的Java基础知识
- 基础知识《十一》Java异常处理总结
- Java实现第九届蓝桥杯快速排序
- 【JAVA】MacBook安装Java环境及eclipse
- 【JAVA】 03-Java中的异常和包的使用
- 深入理解JAVA虚拟机--Idea远程执行本地Java代码
- 【JAVA】java编译错误:编码UTF8/GBK的不可映射字符
- 【JAVA】 02-Java对象细节
- [Linux] Install java and add JAVA_HOME, PATH
- Java java.util.concurrent.Future的一个例子
- 华为OD机试 - 矩阵扩散(Java & JS & Python)
- Java 关于java.util.LinkedHashMap cannot be cast to 实体类问题答案
- java死锁(Java-level deadlock)
- java.lang.OutOfMemoryError: Java heap space错误及处理办法(收集整理、转)
- Java中main方法中的String args[]的用法
- 云原生时代的Java应用优化实践