如何使用管道流?收藏
新一篇: 自定义事件和事件监听器。。。
如何使用管道流?
管道是用来将一个线程的输出流信息传送到另一个线程的输入流中。PipedReader 和PipedWriter (和他们类似的输入输出流PipedInputStream 和PipedOutputStream ) 用来实现一个管道的输入和输出, 为什么这是有用的呢?
考 虑到一个类可能实现一系列的多样的处理功能,如排序、反序文本。如果某个方法的输出能够做为另一个方法的输入,以便于可以把一序列的方法的调用串接起来, 那么这样将可以得到高层次的功能。例如,你可以反序list里每个文字的位置,然后对这些文字进行排序,再反序每个文字来创建一个压韵(可能是按字母顺序 的意思)的list。
如果没有管道流,程序在每一步中只能把当前得到的结果存储在某个临时的位置(比如文件或在内存中)。如下图所示:
没有管道流,程序必须保存中间结果
如果有管道流,那么一个方法的输出可以作为下一个要调用的方法的输入,如下图所示:
通过管道,程序可以把从一个线程传递给另一个。
让我们来看下这个个程序 RhymingWords,它实现是上图所描述得功能。这个程序用管道连接它的反序和排序方法的输入和输出流来创建一个压韵(可能是按字母顺序的意思)的list。这个程序有几个类组成。
首先,让我们来看看main方法中反序和排序方法的调用顺序:
FileReader words = new FileReader("words.txt");
Reader rhymingWords = reverse(sort(reverse(words)));
最里面是调用reverse 方法,并传递一个FileReader对象给它。FileReader对象是打开一个包含一单词列表的文件 words.txt 。reverse 的返回结果传递给sort, sort的返回结果再传递给另一个reverse 方法。
让我们看下reverse这个方法;sort方法也是类似的,一旦你理解了reverse方法,你自然而然会理解sort方法。
public static Reader reverse(Reader src) throws IOException {
BufferedReader in = new BufferedReader(src);
PipedWriter pipeOut = new PipedWriter();
PipedReader pipeIn = new PipedReader(pipeOut);
PrintWriter out = new PrintWriter(pipeOut);
new ReverseThread(out, in).start();
return pipeIn;
}
黑体字的语句声明并初始化一个管道的两端-- PipedWriter
和PipedReader-- 通过PipedWriter对象的基础上创建
ipedReader 对象来实现管道的两端的连接。不管往PipedWriter中写入什么,
都能在PipedReader中读取出来。
管道的连接方法, 如下面的插图所示
使用PipedWriter 和PipedReader 来构件一个管道.
reverse 方法通过启动一个 ReverseThread ,把它的输出(output)
写到PipedWriter 然后把PipedReader返回给调用者。 调用者在通过sort
线程,从管道中读取信息.sort方法除了创建和启动一个SortThread 外,
和reverse方法是非常象的。
分享到:
相关推荐
用qml做的简易管道流动效果,可以用在工业组态。做的比较简单,如果有好的思路请大家交流。可设定管道颜色,管壁颜色。
SIEMENS WINCC管道流动控件。
管道流水效果/管道气体效果Shader
针对java中的管道流的应用的解析,包括PipedInputStream和PipedOutputStream。
WinCC管道流动控件。
用matlab的特征线法求解瞬变流,针对可压缩流体在管道中的流动。
一个详细讲解JAVA_管道流的例子 希望可以帮助到你。
管道检测作业指导书
该文档提供了一种wincc里面组态流体流动动画的一种方法,利用C脚本实现
使用具有过渡,热,多相和沉积功能的商用流线模拟器对反应堆管道系统进行建模。 所使用的基本布局是一条8公里长的管道,内径为6.69,质量流量为17.51 kg / s,含水率(WC)为零,入口温度为70°C。 原油的蜡出现...
UnityTrailRender制作管道内液体流动效果
计算管道瞬变流,利用matlab软件基于特征线法进行计算
自调式螺旋驱动轮组是管道防腐作业线的主要驱动设备,它可使作业线中两支撑轮的中心距及摆角实现一键式调节,且调节后各轮组参数的一致性也易得到保证。同时,作业线设计中增设的中心距、摆角锁止机构也使各轮组工作时...
基于matlab语言开发,计算管道的瞬变流现象,考虑了温度变化
OpenFOAM的二维低速层流管道流动算例(泊肃叶流动)-case文件,下载解压后,./Allrun运行。
AWS18_Innovate_建立实时数据摄取和批量分析流水线 AWS Glue 简介 了解 AWS Glue 相关组件 如何构建一个 ETL 管道 Demo – 使用 Glue 4步创建一个 ETL 管道 参考案例: 如何使用 AWS Glue 构建数据...
java管道流 Listing 1:用管道流截取控制台输出】 PipedInputStream pipedIS = new PipedInputStream(); PipedOutputStream pipedOS = new PipedOutputStream(); try { pipedOS.connect(pipedIS); } catch...
管道分类: 根据进程的相互关系,可以分为:匿名管道与命名管道。 1 匿名管道:管道是父进程和子进程间,或是子进程与子进程间单向的通讯机制,即一个进程发送数据到管道,另外一个进程从管道中读出数据。如果需要...
磁场作用下铁磁流体管道流中的自旋效应,徐双艳,李明军,本文通过分析Yamaguchi讨论的在磁场作用下一类特殊的铁磁流体管道流控制方程,给出了磁场作用下的铁磁流体管道流中产生的磁粘度的表
一个Python模块,帮助你构建复杂管道的批处理作业。它处理依赖项决议,工作流管理、可视化等。它还附带了Hadoop支持内置的。