PipedInputStream
java.lang.Object
|—java.io.InputStream
|—|—java.io.PipedInputStream
public class PipedInputStream
extends InputStream
管道输入流应该连接到管道输出流; 然后,管道输入流提供写入管道输出流的任何数据字节。 通常,数据由一个线程从 PipedInputStream 对象读取,数据由其他线程写入相应的 PipedOutputStream。 不建议尝试从单个线程中使用这两个对象,因为它可能会使线程死锁。 管道输入流包含一个缓冲区,在限制范围内将读取操作与写入操作分离。 如果向连接的管道输出流提供数据字节的线程不再活动,则称该管道已损坏。
Since:
JDK1.0
字段摘要
修饰符和类型 | 字段 | 描述 |
---|---|---|
protected byte[] | buffer | 放置传入数据的循环缓冲区。 |
protected int | in | 当从连接的管道输出流接收时,循环缓冲区中将存储下一个字节数据的位置的索引。 |
protected int | out | 此管道输入流将读取下一个数据字节的循环缓冲区中位置的索引。 |
protected static int | PIPE_SIZE | 管道的循环输入缓冲区的默认大小。 |
构造函数摘要
构造函数 | 描述 |
---|---|
PipedInputStream() | 创建一个 PipedInputStream 以便它尚未连接。 |
PipedInputStream(int pipeSize) | 创建一个 PipedInputStream 以便它尚未连接并使用指定的管道大小作为管道缓冲区。 |
PipedInputStream(PipedOutputStream src) | 创建一个 PipedInputStream 以便它连接到管道输出流 src。 |
PipedInputStream(PipedOutputStream src, int pipeSize) | 创建一个 PipedInputStream 以便它连接到管道输出流 src 并为管道缓冲区使用指定的管道大小。 |
方法总结
修饰符和类型 | 方法 | 描述 |
---|---|---|
int | available() | 返回可以不阻塞地从此输入流中读取的字节数。 |
void | close() | 关闭此管道输入流并释放与该流关联的任何系统资源。 |
void | connect(PipedOutputStream src) | 导致此管道输入流连接到管道输出流 src。 |
int | read() | 从此管道输入流中读取数据的下一个字节。 |
int | read(byte[] b, int off, int len) | 从此管道输入流中读取最多 len 个字节的数据到一个字节数组中。 |
protected void | receive(int b) | 接收一个字节的数据。 |
从类 java.io.InputStream 继承的方法 |
---|
mark, markSupported, read, reset, skip |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
字段详细信息
PIPE_SIZE
protected static final int PIPE_SIZE
管道的循环输入缓冲区的默认大小。
Since:
JDK1.1
buffer
protected byte[] buffer
放置传入数据的循环缓冲区。
Since:
JDK1.1
in
protected int in
当从连接的管道输出流接收时,循环缓冲区中将存储下一个字节数据的位置的索引。 in<0 表示缓冲区为空,in==out 表示缓冲区已满
Since:
JDK1.1
out
protected int out
此管道输入流将读取下一个数据字节的循环缓冲区中位置的索引。
Since:
JDK1.1
构造函数详细信息
PipedInputStream
public PipedInputStream(PipedOutputStream src) throws IOException
创建一个 PipedInputStream 以便它连接到管道输出流 src。 然后,写入 src 的数据字节将可用作此流的输入。
参数:
参数名称 | 参数描述 |
---|---|
src | 要连接的流。 |
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果发生 I/O 错误。 |
PipedInputStream
public PipedInputStream(PipedOutputStream src, int pipeSize) throws IOException
创建一个 PipedInputStream 以便它连接到管道输出流 src 并为管道缓冲区使用指定的管道大小。 然后,写入 src 的数据字节将可用作此流的输入。
参数:
参数名称 | 参数描述 |
---|---|
src | 要连接的流。 |
pipeSize | 管道缓冲区的大小。 |
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果发生 I/O 错误。 |
IllegalArgumentException | 如果管道大小 <= 0。 |
Since:
1.6
PipedInputStream
public PipedInputStream()
创建一个 PipedInputStream 以便它尚未连接。 在使用之前,它必须连接到 PipedOutputStream。
PipedInputStream
public PipedInputStream(int pipeSize)
创建一个 PipedInputStream 以便它尚未连接并使用指定的管道大小作为管道缓冲区。 在使用之前,它必须连接到 PipedOutputStream。
参数:
参数名称 | 参数描述 |
---|---|
pipeSize | 管道缓冲区的大小。 |
Throws:
Throw名称 | Throw描述 |
---|---|
IllegalArgumentException | 如果 pipeSize <= 0. |
Since:
1.6
方法详情
connect
public void connect(PipedOutputStream src) throws IOException
导致此管道输入流连接到管道输出流 src。 如果此对象已连接到其他管道输出流,则会引发 IOException。
如果 src 是一个未连接的管道输出流并且 snk 是一个未连接的管道输入流,它们可以通过以下任一调用连接:
snk.connect(src)
或调用:
src.connect(snk)
这两个调用具有相同的效果。
参数:
参数名称 | 参数描述 |
---|---|
src | 要连接的管道输出流。 |
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果发生 I/O 错误。 |
receive
protected void receive(int b) throws IOException
接收一个字节的数据。 如果没有可用的输入,此方法将阻塞。
参数:
参数名称 | 参数描述 |
---|---|
b | 正在接收的字节 |
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果管道损坏、未连接、关闭或发生 I/O 错误。 |
Since:
JDK1.1
read
public int read() throws IOException
从此管道输入流中读取数据的下一个字节。 值字节以 0 到 255 范围内的 int 形式返回。此方法阻塞,直到输入数据可用、检测到流结束或引发异常。
指定者:
读入类 InputStream
返回:
数据的下一个字节,如果到达流的末尾,则为 -1。
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果管道未连接、损坏、关闭或发生 I/O 错误。 |
read
public int read(byte[] b, int off, int len) throws IOException
从此管道输入流中读取最多 len 个字节的数据到一个字节数组中。 如果到达数据流的末尾或 len 超过管道的缓冲区大小,则将读取少于 len 个字节。 如果 len 为零,则不读取任何字节并返回 0; 否则,该方法将阻塞,直到至少有 1 个字节的输入可用、检测到流结束或抛出异常。
覆盖:
读入类 InputStream
参数:
参数名称 | 参数描述 |
---|---|
b | 读取数据的缓冲区。 |
off | 目标数组 b 中的起始偏移量 |
len | 读取的最大字节数。 |
返回:
读入缓冲区的总字节数,如果由于到达流的末尾而没有更多数据,则为 -1。
Throws:
Throw名称 | Throw描述 |
---|---|
NullPointerException | 如果 b 为空。 |
IndexOutOfBoundsException | 如果 off 为负数,len 为负数,或者 len 大于 b.length – off |
IOException | 如果管道损坏、未连接、关闭或发生 I/O 错误。 |
available
public int available() throws IOException
返回可以不阻塞地从此输入流中读取的字节数。
覆盖:
在类 InputStream 中可用
返回:
可以在不阻塞的情况下从此输入流中读取的字节数,如果此输入流已通过调用其 close() 方法关闭,或者管道未连接或损坏,则为 0。
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果发生 I/O 错误。 |
Since:
JDK1.0.2
close
public void close() throws IOException
关闭此管道输入流并释放与该流关联的任何系统资源。
指定者:
在接口 AutoCloseable 中关闭
指定者:
在接口Closeable中关闭
覆盖:
在类 InputStream 中关闭
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果发生 I/O 错误。 |