zl程序教程

您现在的位置是:首页 >  其他

当前栏目

[十九]JavaIO之PipedReader 和 PipedWriter详解编程语言

编程语言 详解 十九 JavaIO
2023-06-13 09:20:45 时间

我们在线程A中向PipedOutputStream中写入数据,这些数据会自动的发送到与PipedOutputStream对应的PipedInputStream中,进而存储在PipedInputStream的缓冲中;

线程B通过读取PipedInputStream中的数据

对照到我上面画的图就是这样:

image_5b9a0f61_339d


我们现在看下PipedReader  和  PipedWriter的关键的成员变量
你应该可以想得到
他们的实现逻辑跟PipedInputStream和PipeOutputStream是类似的
连接之后,就形成了一个管道  (其实就是PipedWriter  内部可以调用PipedReader 的方法)

PipedWriter 写入的数据,可以通过PipedReader  进行读取


对于PipedWriter 有两种形式
单纯的创建一个PIpedWriter
或者创建的同时一并连接到一个PipedReader
connect方法,根本形式只有一种

不管是PipedWriter连接PipedReader  还是 PipedReader  连接 PipedReader

首先真正的将PipedReader和PipedWriter进行连接,也就是设置sink
然后就是设置in和out 他们是写入PipedReader中的缓冲区和从缓冲区读取的索引号
然后就是标志已经连接成功了
PipedWriter 提供了两个版本的write方法
写入一个字符
或者写入一些字符 从cbuf[] off偏移量开始的len个字符

public void write(int c)  throws IOException
public void write(char cbuf[], int off, int len) throws IOException  image_5b9a0f61_6116 看得出来,PipedReader也是有一个receive方法,用来写入缓冲区


PipedReader 提供了两个版本的read方法
读取一个字符
或者读取指定个数的字符数目  保存到指定的数组,到她的指定的位置
public synchronized int read()  throws IOException
public synchronized int read(char cbuf[], int off, int len)  throws IOException 
PipedReader 提供了ready
in是写入数据的下一个索引值,默认是-1
如果小于0 显然没有任何数据已经被写入,也就是PipedReader中的缓冲区中并没有数据
也就是没ready 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/15600.html

c