iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >PipedInputStream与PipedOutputStream有哪些不同的地方
  • 526
分享到

PipedInputStream与PipedOutputStream有哪些不同的地方

pipedinputstreampipedoutputstreamnpu 2023-05-31 14:05:09 526人浏览 八月长安
摘要

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

今天就跟大家聊聊有关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();    }  }}

--结束END--

本文标题: PipedInputStream与PipedOutputStream有哪些不同的地方

本文链接: https://www.lsjlt.com/news/226321.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • PipedInputStream与PipedOutputStream有哪些不同的地方
    今天就跟大家聊聊有关PipedInputStream与PipedOutputStream有哪些不同的地方,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。java 管道介绍在java中,...
    99+
    2023-05-31
    pipedinputstream pipedoutputstream npu
  • PipedReader与PipedWriter有哪些不同的地方
    这篇文章将为大家详细讲解有关PipedReader与PipedWriter有哪些不同的地方,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。PipedWriter与PipedReader的区别1...
    99+
    2023-05-31
    pipedwriter ipedreader
  • Log4j与Log4j2有哪些不同的地方
    这篇文章将为大家详细讲解有关Log4j与Log4j2有哪些不同的地方,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。log4j是Apache的一个开源项目,我们不去考究它的起源时间,但是据我了...
    99+
    2023-05-31
    log4j log4j2 og
  • classpath与path有哪些不同的地方
    这期内容当中小编将会给大家带来有关classpath与path有哪些不同的地方,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。详解path和classpath的区别path的作用path是系统用来指定可执行...
    99+
    2023-05-31
    path classpath
  • ConcurrentHashMap与HashMap有哪些不同地方
    本篇文章为大家展示了ConcurrentHashMap与HashMap有哪些不同地方,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。HashMap本质是数组加链表,根据key取得hash值,然后计算出...
    99+
    2023-05-31
    hashmap concurrenthashmap nt
  • Kotlin语法 与 Java语法有哪些不同的地方
    这篇文章给大家介绍Kotlin语法 与 Java语法有哪些不同的地方,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Kotlin 与 Java基本语法对比Kotlin比Java更年轻,但它是一个非常有前途的编程语言,它的...
    99+
    2023-05-31
    kotlin java ava
  • DetachedCriteria与Criteria的用方有哪些不同
    这期内容当中小编将会给大家带来有关DetachedCriteria与Criteria的用方有哪些不同,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在常规的Web编程中,有大量的动态条件查询,即用户在网页上...
    99+
    2023-05-31
    detachedcriteria criteria
  • nodejs与swoole的不同点有哪些
    这篇“nodejs与swoole的不同点有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“nodejs与swoole的不同...
    99+
    2023-06-29
  • Java与JavaScript有哪些不同点
    这篇文章主要为大家展示了“Java与JavaScript有哪些不同点”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java与JavaScript有哪些不同点”这篇文章吧。对Java与JavaSc...
    99+
    2023-06-03
  • java与JavaScript的不同之处有哪些
    这篇文章主要为大家展示了“java与JavaScript的不同之处有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java与JavaScript的不同之处有...
    99+
    2024-04-02
  • win10与win11系统有什么不同的地方
    windows11系统很多人都是非常期待的,毕竟是win10发布好几年后一个全新的系统了,那么我们就来看看win11系统有什么不同吧。1、开始菜单:简单的图标,没有动态磁贴Win11 的“开始”菜单与 Win10 的平铺应用程序快捷方式(从...
    99+
    2023-07-10
  • Java与C#的不同之处有哪些
    Java与C#的不同之处有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。关于类的理解重载访问器(Accessors——Getters)和修改器(Mutators——Se...
    99+
    2023-06-17
  • Node的CJS与ESM有哪些不同点
    今天小编给大家分享一下Node的CJS与ESM有哪些不同点的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起...
    99+
    2024-04-02
  • Java中的String 与 new String()有什么不同的地方
    这篇文章给大家介绍Java中的String 与 new String()有什么不同的地方,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java String 和 new String()的区别栈区存引用和基本类型,不能...
    99+
    2023-05-31
    java string new string()
  • Kotlin注解与java注解有什么不同的地方
    本篇文章为大家展示了Kotlin注解与java注解有什么不同的地方,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Kotlin 的注解完全兼容 Java 的注解。声明注解@Target(Annotat...
    99+
    2023-05-31
    kotlin 注解 java
  • MySQL GTID与MariaDB GTID的不同之处有哪些
    小编给大家分享一下MySQL GTID与MariaDB GTID的不同之处有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!G...
    99+
    2024-04-02
  • ASP和Apache的日志同步方案有哪些不同?
    随着互联网技术的不断发展,越来越多的网站使用ASP和Apache来构建和管理网站。在这些网站中,日志记录是非常重要的一部分,它可以帮助网站管理员了解访问者的行为和网站的流量情况,以便更好地管理和优化网站。然而,由于ASP和Apache使用...
    99+
    2023-10-01
    apache 同步 日志
  • Git 与 Java 的同步编程算法:有哪些值得注意的地方?
    在软件开发中,版本控制是一个重要的环节。Git 作为一个分布式版本控制系统,在现代软件开发中被广泛应用。而在 Java 编程中,同步算法是一个必不可少的部分。本文将介绍 Git 与 Java 的同步编程算法,探讨它们之间的联系以及注意事项...
    99+
    2023-09-25
    git 同步 编程算法
  • Python中CST 和AST类有哪些相同的地方
    这篇文章给大家介绍Python中CST 和AST类有哪些相同的地方,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Python CST 和AST 类似,都是语法分析所获得的中间结果。他们的不同之处在于,CST直接对应语法...
    99+
    2023-06-17
  • Python中figure与axies绘图有哪些不同
    目录一、二者区别介绍二、对应的程序一、二者区别介绍 学习别人写的代码时,关于使用matplotlib绘图单面,有多种实现方式,什么plt.plot 啦,ax.plot 啦,虽然都能实...
    99+
    2023-02-07
    Python figure绘图 Python axies绘图
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作