public class PipedInputStream
extends InputStream
java.lang.Object | ||
↳ | java.io.InputStream | |
↳ | java.io.PipedInputStream |
管道输入流应连接到管道输出流; 管道输入流然后提供写入管道输出流的任何数据字节。 通常,数据是通过一个线程从PipedInputStream
对象中读取的,并且数据通过其他线程写入相应的PipedOutputStream
。 不建议尝试从单个线程使用这两个对象,因为它可能使线程死锁。 管道输入流包含一个缓冲区,在限制范围内将读取操作与写入操作解耦。 如果向连接的管道输出流提供数据字节的线程不再有效,则管道被称为broken 。
也可以看看:
Constants |
|
---|---|
int |
PIPE_SIZE 管道的循环输入缓冲区的缺省大小。 |
Fields |
|
---|---|
protected byte[] |
buffer 传入数据放入其中的循环缓冲区。 |
protected int |
in 当从连接的管道输出流接收到数据的下一个字节时,循环缓冲区中的位置索引。 |
protected int |
out 循环缓冲区中位置的索引,此管道输入流将读取下一个字节的数据。 |
Public constructors |
|
---|---|
PipedInputStream(PipedOutputStream src) 创建一个 |
|
PipedInputStream(PipedOutputStream src, int pipeSize) 创建一个 |
|
PipedInputStream() 创建一个 |
|
PipedInputStream(int pipeSize) 创建一个 |
Public methods |
|
---|---|
int |
available() 返回可以从该输入流中读取而不被阻塞的字节数。 |
void |
close() 关闭此管道输入流并释放与该流关联的所有系统资源。 |
void |
connect(PipedOutputStream src) 使此管道输入流连接到管道输出流 |
int |
read() 从此管道输入流中读取下一个字节的数据。 |
int |
read(byte[] b, int off, int len) 从这个管道输入流中最多读取 |
Protected methods |
|
---|---|
void |
receive(int b) 接收一个字节的数据。 |
Inherited methods |
|
---|---|
From class java.io.InputStream
|
|
From class java.lang.Object
|
|
From interface java.io.Closeable
|
|
From interface java.lang.AutoCloseable
|
PipedInputStream (PipedOutputStream src)
创建一个PipedInputStream
以便它连接到管道输出流src
。 写入src
数据字节将作为该流的输入。
Parameters | |
---|---|
src |
PipedOutputStream : the stream to connect to. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
PipedInputStream (PipedOutputStream src, int pipeSize)
创建一个PipedInputStream
以便它连接到管道输出流src
并使用管道缓冲区的指定管道大小。 写入src
数据字节将作为来自此流的输入。
Parameters | |
---|---|
src |
PipedOutputStream : the stream to connect to. |
pipeSize |
int : the size of the pipe's buffer. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
IllegalArgumentException |
if pipeSize <= 0 . |
PipedInputStream ()
创建一个PipedInputStream
以便它尚未connected 。 在使用之前,它必须是connected到PipedOutputStream
。
PipedInputStream (int pipeSize)
创建一个PipedInputStream
以便它尚未connected,并使用管道缓冲区的指定管道大小。 在使用之前,它必须是connected到PipedOutputStream
。
Parameters | |
---|---|
pipeSize |
int : the size of the pipe's buffer. |
Throws | |
---|---|
IllegalArgumentException |
if pipeSize <= 0 . |
int available ()
返回可以从该输入流中读取而不被阻塞的字节数。
Returns | |
---|---|
int |
the number of bytes that can be read from this input stream without blocking, or 0 if this input stream has been closed by invoking its close() method, or if the pipe is unconnected , or broken . |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
void close ()
关闭此管道输入流并释放与该流关联的所有系统资源。
Throws | |
---|---|
IOException |
if an I/O error occurs. |
void connect (PipedOutputStream src)
使此管道输入流连接到管道输出流src
。 如果此对象已连接到某个其他管道输出流, IOException
引发IOException
。
如果 src
是未连接的管道输出流,而 snk
是未连接的管道输入流,则它们可以通过以下任一方式进行连接:
snk.connect(src)
或电话:
src.connect(snk)
这两个调用具有相同的效果。
Parameters | |
---|---|
src |
PipedOutputStream : The piped output stream to connect to. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
int read ()
从此管道输入流中读取下一个字节的数据。 值字节被返回作为int
范围0
到255
。 此方法阻塞直到输入数据可用,流的末尾被检测到,或抛出异常。
Returns | |
---|---|
int |
the next byte of data, or -1 if the end of the stream is reached. |
Throws | |
---|---|
IOException |
if the pipe is unconnected , broken , closed, or if an I/O error occurs. |
int read (byte[] b, int off, int len)
从该管道输入流中最多读取len
个字节的数据到一个字节数组中。 如果数据流的末尾已达到或者len
超过管道的缓冲区大小,将读取少于len
个字节。 如果len
为零,则不读取字节并返回0; 否则,该方法阻塞,直到至少有1个字节的输入可用,流的末尾已被检测到,或者引发异常。
Parameters | |
---|---|
b |
byte : the buffer into which the data is read. |
off |
int : the start offset in the destination array b |
len |
int : the maximum number of bytes read. |
Returns | |
---|---|
int |
the total number of bytes read into the buffer, or -1 if there is no more data because the end of the stream has been reached. |
Throws | |
---|---|
NullPointerException |
If b is null . |
IndexOutOfBoundsException |
If off is negative, len is negative, or len is greater than b.length - off |
IOException |
if the pipe is broken , unconnected , closed, or if an I/O error occurs. |
void receive (int b)
接收一个字节的数据。 如果没有可用输入,此方法将被阻止。
Parameters | |
---|---|
b |
int : the byte being received |
Throws | |
---|---|
IOException |
If the pipe is broken , unconnected , closed, or if an I/O error occurs. |