目录:系统学习 Java IO---- 目录,概览

PipedInputStream 类使得可以作为字节流读取管道的内容。 管道是同一 JVM 内的线程之间的通信通道。

使用两个已连接的管道流时,要为每个流操作创建一个线程,
read() 和 write() 都是阻塞方法,如果一个线程同时读写就会造成死锁

看一个例子:

public class Pipe {public static void main(String[] args) throws IOException {final PipedOutputStream output = new PipedOutputStream();final PipedInputStream input = new PipedInputStream(output);// 写线程,创建匿名 Runnable 对象Thread thread1 = new Thread(new Runnable() {@Overridepublic void run() {try {output.write("Hello Pipe".getBytes());} catch (IOException e) {e.printStackTrace();}}});// 读线程,用一下 Lambda 表达式创建匿名 Runnable 对象Thread thread2 = new Thread(() -> {try {int data = input.read();while (data != -1) {System.out.print((char) data);data = input.read();}System.out.println();} catch (IOException e) {e.printStackTrace();}});thread1.start();thread2.start();}
}

这里通过利用构造方法来直接指定管道输入流的管道输出流。
PipedInputStream input = new PipedInputStream(output);

也可以使用 pipe1.connect(pipe2) 来连接两个管道流,例如:
PipedInputStream pis = new PipedInputStream(); pis.connect(pos);

除了管道之外,还有许多其他方法可以在同一个 JVM 中进行通信。
事实上,线程更经常交换完整的对象而不是原始的字节数据。
但是如果需要在线程之间交换原始字节数据,Java IO 的管道是能做到的。

转载于:https://www.cnblogs.com/czwbig/p/10011870.html

系统学习 Java IO (六)----管道流 PipedInputStream/PipedOutputStream相关推荐

  1. java缓存流速度与硬盘_系统学习 Java IO (九)----缓冲流 BufferedInputStream/BufferedOutputStream...

    BufferedInputStream BufferedInputStream 类为输入流提供缓冲. 缓冲可以加快IO的速度. BufferedInputStream 不是一次从网络或磁盘读取一个字节 ...

  2. java inputstream 回退_系统学习 Java IO (十)----回退流 PushbackInputStream

    PushbackInputStream 旨在从 InputStream 解析数据时使用. 有时您需要先读取几个字节以查看将要发生的事情,然后才能确定如何解释当前字节, PushbackInputStr ...

  3. Java IO 之 管道流 原理分析

    概述 管道流是用来在多个线程之间进行信息传递的Java流. 管道流分为字节流管道流和字符管道流. 字节管道流:PipedOutputStream 和 PipedInputStream. 字符管道流:P ...

  4. 系统学习JAVA第十七天(字节流、字符流、缓冲的字节流、缓冲的字符流、将字节流转换为缓冲的字符流、面向对象——>字节流转成对象)

    系统学习JAVA第十七天 第一阶段在2021.2.1结束了! 一.数据传输 IO输入和输出,硬盘之间的数据交换 1.文件读写流程 ①创建文件的容器 ②判断方向 合适的类 创建和文件之间的通道 ③ 调用 ...

  5. 作为初学者,应该如何系统学习Java呢?

    Java编程语言发展的迅猛,每年的Java人才缺口人数都高达百万以上.作为IT小白应该如何系统学习Java呢?作为过来人,小千在这里给大家一些中肯的意见,希望对大家的工作和学习Java有一定的借鉴作用 ...

  6. 你为什么学不好Java?系统学习Java的七大因素

    随着传统行业的没落,越来越多的人准备进军互联网行业,如何学好Java成功就业的问题在网上越来越热,在知乎上面看了好多介绍学习方法的文章和一些优秀答主的高赞回答.多数创作都是围绕着学习什么技术比较专业性 ...

  7. 管道流 pipedinputstream

    public class StreamDemo3 { public static void main(String[] args) { try { //管道流 PipedInputStream in ...

  8. Java IO: 其他字符流(下)

    转载自   Java IO: 其他字符流(下) 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的PushbackRe ...

  9. Java——IO(打印流)

    1,打印字节流(PrintStream)的概述: 打印流可以很方便的将对象的toString()结果输出并且自动加上换行,而且可以使用自动刷出的模式 System.out就是一个PrintStream ...

最新文章

  1. c++ fork 进程时 共享内存_linux共享内存mmap
  2. jsp里面声明了utf-8格式,也写了字符编码过滤器,数据库编码也是utf-8,就连java.......
  3. linux --redis的部署 即主从
  4. 收藏!2021最新期刊预警名单汇总!
  5. 既然是青春,怎么能错过?唯一理由只缺1张免费票!
  6. Unity基础:简易道具生成
  7. wps linux2019特色功能,WPS Office 2019 For Linux更新至11.1.0.9522版,附新功能介绍
  8. 尚学堂马士兵老师的JAVA自学之路
  9. sql注入与sqlmap工具使用
  10. 如何购买阿里云域名教程(域名购买+配置)~
  11. 美丽的日本与我(川端康成在诺贝尔文学奖颁奖典礼上的演讲词)
  12. gazebo仿真之Velodyne
  13. 恋爱计时:只要时间在走,我们的爱就在继续
  14. java操作es聚合操作并显示其他字段_深入浅析Elasticsearch中的聚合操作
  15. CSDN【精品专栏】第六期
  16. grep和egrep的区别
  17. OtoStudio可视化界面开发示例
  18. 利用火狐浏览器的编辑和重发功能修改网站POST请求
  19. [问题已处理]-阿里云服务器种了蠕虫病毒和恶意下载病毒处理
  20. Google Drive For Linux

热门文章

  1. 计算机科学与技术 天涯,计算机科学与技术专业
  2. 上传源文件至虚拟服务器,C# 通过WebService上传视频文件到服务器虚拟机下源码...
  3. python刘卫国实验题_MATLAB 程序设计与应用(刘卫国版)习题答案3-4
  4. 八、Pandas的基本使用
  5. 天池 在线编程 区间统计(队列)
  6. LeetCode 1702. 修改后的最大二进制字符串(贪心)
  7. LeetCode 1696. 跳跃游戏 VI(优先队列 / 单调队列)
  8. 牛客 牛牛选物(01背包)
  9. LeetCode 837. 新21点(动态规划)
  10. stotybord如何添加子视图_Revit软件技巧合集(建筑构件、视图处理、建筑表现、高级技巧)...