我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PipedInputStream与PipedOutputStream有哪些不同的地方

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PipedInputStream与PipedOutputStream有哪些不同的地方

今天就跟大家聊聊有关PipedInputStream与PipedOutputStream有哪些不同的地方,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

java 管道介绍

在java中,PipedOutputStream和PipedInputStream分别是管道输出流和管道输入流。
它们的作用是让多线程可以通过管道进行线程间的通讯。在使用管道通信时,必须将PipedOutputStream和PipedInputStream配套使用。

使用管道通信时,大致的流程是:我们在线程A中向PipedOutputStream中写入数据,这些数据会自动的发送到与PipedOutputStream对应的PipedInputStream中,进而存储在PipedInputStream的缓冲中;此时,线程B通过读取PipedInputStream中的数据。就可以实现,线程A和线程B的通信。
PipedOutputStream和PipedInputStream源码分析

下面介绍PipedOutputStream和PipedInputStream的源码。在阅读它们的源码之前,建议先看看源码后面的示例。待理解管道的作用和用法之后,再看源码,可能更容易理解。

1. PipedOutputStream 源码分析(基于jdk1.7.40)

package java.io;import java.io.*;public class PipedOutputStream extends OutputStream {  // 与PipedOutputStream通信的PipedInputStream对象  private PipedInputStream sink;  // 构造函数,指定配对的PipedInputStream  public PipedOutputStream(PipedInputStream snk) throws IOException {    connect(snk);  }  // 构造函数  public PipedOutputStream() {  }  // 将“管道输出流” 和 “管道输入流”连接。  public synchronized void connect(PipedInputStream snk) throws IOException {    if (snk == null) {      throw new NullPointerException();    } else if (sink != null || snk.connected) {      throw new IOException("Already connected");    }    // 设置“管道输入流”    sink = snk;    // 初始化“管道输入流”的读写位置    // int是PipedInputStream中定义的,代表“管道输入流”的读写位置    snk.in = -1;    // 初始化“管道输出流”的读写位置。    // out是PipedInputStream中定义的,代表“管道输出流”的读写位置    snk.out = 0;    // 设置“管道输入流”和“管道输出流”为已连接状态    // connected是PipedInputStream中定义的,用于表示“管道输入流与管道输出流”是否已经连接    snk.connected = true;  }  // 将int类型b写入“管道输出流”中。  // 将b写入“管道输出流”之后,它会将b传输给“管道输入流”  public void write(int b) throws IOException {    if (sink == null) {      throw new IOException("Pipe not connected");    }    sink.receive(b);  }  // 将字节数组b写入“管道输出流”中。  // 将数组b写入“管道输出流”之后,它会将其传输给“管道输入流”  public void write(byte b[], int off, int len) throws IOException {    if (sink == null) {      throw new IOException("Pipe not connected");    } else if (b == null) {      throw new NullPointerException();    } else if ((off < 0) || (off > b.length) || (len < 0) ||          ((off + len) > b.length) || ((off + len) < 0)) {      throw new IndexOutOfBoundsException();    } else if (len == 0) {      return;    }    // “管道输入流”接收数据    sink.receive(b, off, len);  }  // 清空“管道输出流”。  // 这里会调用“管道输入流”的notifyAll();  // 目的是让“管道输入流”放弃对当前资源的占有,让其它的等待线程(等待读取管道输出流的线程)读取“管道输出流”的值。  public synchronized void flush() throws IOException {    if (sink != null) {      synchronized (sink) {        sink.notifyAll();      }    }  }  // 关闭“管道输出流”。  // 关闭之后,会调用receivedLast()通知“管道输入流”它已经关闭。  public void close() throws IOException {    if (sink != null) {      sink.receivedLast();    }  }}

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PipedInputStream与PipedOutputStream有哪些不同的地方

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PipedInputStream与PipedOutputStream有哪些不同的地方

今天就跟大家聊聊有关PipedInputStream与PipedOutputStream有哪些不同的地方,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。java 管道介绍在java中,
2023-05-31

Log4j与Log4j2有哪些不同的地方

这篇文章将为大家详细讲解有关Log4j与Log4j2有哪些不同的地方,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。log4j是Apache的一个开源项目,我们不去考究它的起源时间,但是据我了
2023-05-31

PipedReader与PipedWriter有哪些不同的地方

这篇文章将为大家详细讲解有关PipedReader与PipedWriter有哪些不同的地方,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。PipedWriter与PipedReader的区别1
2023-05-31

classpath与path有哪些不同的地方

这期内容当中小编将会给大家带来有关classpath与path有哪些不同的地方,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。详解path和classpath的区别path的作用path是系统用来指定可执行
2023-05-31

ConcurrentHashMap与HashMap有哪些不同地方

本篇文章为大家展示了ConcurrentHashMap与HashMap有哪些不同地方,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。HashMap本质是数组加链表,根据key取得hash值,然后计算出
2023-05-31

Kotlin语法 与 Java语法有哪些不同的地方

这篇文章给大家介绍Kotlin语法 与 Java语法有哪些不同的地方,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Kotlin 与 Java基本语法对比Kotlin比Java更年轻,但它是一个非常有前途的编程语言,它的
2023-05-31

DetachedCriteria与Criteria的用方有哪些不同

这期内容当中小编将会给大家带来有关DetachedCriteria与Criteria的用方有哪些不同,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在常规的Web编程中,有大量的动态条件查询,即用户在网页上
2023-05-31

nodejs与swoole的不同点有哪些

这篇“nodejs与swoole的不同点有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“nodejs与swoole的不同
2023-06-29

Java与JavaScript有哪些不同点

这篇文章主要为大家展示了“Java与JavaScript有哪些不同点”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java与JavaScript有哪些不同点”这篇文章吧。对Java与JavaSc
2023-06-03

Java与C#的不同之处有哪些

Java与C#的不同之处有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、关于类的理解2、重载3、访问器(Accessors——Getters)和修改器(Mutato
2023-06-17

win10与win11系统有什么不同的地方

windows11系统很多人都是非常期待的,毕竟是win10发布好几年后一个全新的系统了,那么我们就来看看win11系统有什么不同吧。1、开始菜单:简单的图标,没有动态磁贴Win11 的“开始”菜单与 Win10 的平铺应用程序快捷方式(从
2023-07-10

php与c++不同之处有哪些

php与c++不同之处有:1、PHP是在服务器端执行的脚本语言,而C++是C语言的继承;2、PHP中不支持C++中的重载;3、关于abstract和interface的使用不同;4、PHP是弱类型语言,所以PHP的多态性不像C++明显等等。
2018-04-18

Java中的String 与 new String()有什么不同的地方

这篇文章给大家介绍Java中的String 与 new String()有什么不同的地方,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java String 和 new String()的区别栈区存引用和基本类型,不能
2023-05-31

Kotlin注解与java注解有什么不同的地方

本篇文章为大家展示了Kotlin注解与java注解有什么不同的地方,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Kotlin 的注解完全兼容 Java 的注解。声明注解@Target(Annotat
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录