原文链接 作者: Jakob Jenkov  译者: 李璟(jlee381344197@gmail.com)

Java IO中的管道为运行在同一个JVM中的两个线程提供了通信的能力。所以管道也可以作为数据源以及目标媒介。

你不能利用管道与不同的JVM中的线程通信(不同的进程)。在概念上,Java的管道不同于Unix/Linux系统中的管道。在Unix/Linux中,运行在不同地址空间的两个进程可以通过管道通信。在Java中,通信的双方应该是运行在同一进程中的不同线程。

通过Java IO创建管道

可以通过Java IO中的PipedOutputStream和PipedInputStream创建管道。一个PipedInputStream流应该和一个PipedOutputStream流相关联。一个线程通过PipedOutputStream写入的数据可以被另一个线程通过相关联的PipedInputStream读取出来。

Java IO管道示例

这是一个如何将PipedInputStream和PipedOutputStream关联起来的简单例子:

你也可以使用两个管道共有的connect()方法使之相关联。PipedInputStream和PipedOutputStream都拥有一个可以互相关联的connect()方法。

管道和线程

请记得,当使用两个相关联的管道流时,务必将它们分配给不同的线程。read()方法和write()方法调用时会导致流阻塞,这意味着如果你尝试在一个线程中同时进行读和写,可能会导致线程死锁。

管道的替代

除了管道之外,一个JVM中不同线程之间还有许多通信的方式。实际上,线程在大多数情况下会传递完整的对象信息而非原始的字节数据。但是,如果你需要在线程之间传递字节数据,Java IO的管道是一个不错的选择。

Java IO: 管道相关推荐

  1. Java IO: PipedInputStream

    PipedInputStream可以从管道中读取字节流数据,代码如下: 01 InputStream input = new PipedInputStream(pipedOutputStream); ...

  2. Java IO: PipedOutputStream

    转载自   Java IO: PipedOutputStream 译文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) PipedOutputSt ...

  3. Java IO: 字符流的Piped和CharArray

    转载自   Java IO: 字符流的Piped和CharArray 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本章节将简要介绍管道与字符数组相 ...

  4. Java基础17:Java IO流总结

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/a724888/article/details/80201802 这位大侠,这是我的公众号:程序员江湖 ...

  5. 断开的管道 java.io.IOException: Broken pipe 解决方法

    断开的管道 java.io.IOException: Broken pipe 解决方法 一.Broken pipe产生原因分析 1.当访问某个服务突然服务器挂了,就会产生Broken pipe; 2. ...

  6. 系统学习 Java IO (六)----管道流 PipedInputStream/PipedOutputStream

    目录:系统学习 Java IO---- 目录,概览 PipedInputStream 类使得可以作为字节流读取管道的内容. 管道是同一 JVM 内的线程之间的通信通道. 使用两个已连接的管道流时,要为 ...

  7. java io broken pipe解决_报错!!java.io.IOException: 断开的管道 中文报错?Broken pipe?这次发生的报错不影响业务,已有解决方案...

    org.apache.catalina.connector.ClientAbortException: java.io.IOException: 断开的管道 at org.apache.catalin ...

  8. JAVA IO流(内存流、管道流、打印流)

    1.内存操作流 2.管道流 3.字节.字符转换流 4.字符的编码问题 5.打印流 6.System类对IO的支持 7.对象序列化 内存操作流 FileInputStream 和FileOutputSt ...

  9. (十二)Core Java IO流(Properties,序列化,管道流,字符编码)-03 (108)

     目录 :             41 ). IO流(创建java文件列表) 42 ). IO流(Properties简述) 43 ). IO流(Properties存取) 44 ). IO流(Pr ...

最新文章

  1. 用于RGB-D显著目标检测的自监督表示学习
  2. 如何用python写游戏_一步步教你怎么用python写贪吃蛇游戏
  3. Just $h$-index HDU - 6278(主席树找区间大于等于k的个数)
  4. Web在线操作Office之Word
  5. 错误Cannot resolve org.springframework.data:spring-data-redis:2.2.6 RELEASE
  6. php自动滚动到页尾,让DOM元素自动滚到视野内ScrollIntoView
  7. win32汇编实现一个时钟
  8. 计算机丢失gdiplus黑屏,电脑丢失gdiplus.dll黑屏,黑屏时还自动重启还怎么处理
  9. golang c10k问题
  10. php四段拼接ip,合并相同的ip段算法
  11. (15)FPGA与CPU区别
  12. 微信小程序发送微信公众号模板消息
  13. excel快速选择数据的4种方法
  14. 1叉叉加速器分析_加速分析
  15. 7-2 愿天下有情人都是失散多年的兄妹
  16. 《运营力——微信公众号 设计 策划 客服 管理 一册通》一一1.1 创博公众号团队简介...
  17. 基于STM32单片机的密码锁(Proteus仿真+程序+报告)
  18. 秒表计时器怎么读_秒表使用说明书
  19. bp神经网络原理 实现过程,BP神经网络的实现包括
  20. Linux 查找项目路径

热门文章

  1. JDK线程池的ThreadFactory
  2. java使用ssh连接Linux并执行命令
  3. centos源码安装mysql5.7.25-boost
  4. (原創) 标准的makefile写法 (C/C++)
  5. 基于jQuery实现富文本的拖拽和修改大小
  6. 单片机向左,嵌入式向右
  7. [shell] 让你提升命令行效率的 Bash 快捷键 [完整版]
  8. 分析PoS的存币挖矿和币价格——如何设计PoS挖矿才有利于吸引用户?
  9. 我需要运行自己的节点吗?
  10. BCH大区块导致中心化其实是伪命题