- java.lang.Object
-
- java.io.InputStream
-
- java.io.PipedInputStream
-
- All Implemented Interfaces:
-
Closeable
,AutoCloseable
public class PipedInputStream extends InputStream
管道输入流应连接到管道输出流; 管道输入流然后提供写入管道输出流的任何数据字节。 通常,一个线程从PipedInputStream
对象读取数据,并且其他线程将数据写入相应的PipedOutputStream
。 不建议尝试从单个线程使用这两个对象,因为它可能会使线程死锁。 管道输入流包含一个缓冲区,在读取操作中将读取操作与限制内的操作相分离。 如果向连接的管道输出流提供数据字节的线程不再存在, 则称管道为broken 。- 从以下版本开始:
- 1.0
- 另请参见:
-
PipedOutputStream
-
-
构造方法摘要
构造方法 Constructor 描述 PipedInputStream()
创建一个PipedInputStream
,使其尚未 connected 。PipedInputStream(int pipeSize)
创建一个PipedInputStream
,使其不是 connected并且使用指定的管道大小作为管道的缓冲区。PipedInputStream(PipedOutputStream src)
创建一个PipedInputStream
,使其连接到管道输出流src
。PipedInputStream(PipedOutputStream src, int pipeSize)
创建一个PipedInputStream
,使其连接到管道输出流src
并为管道缓冲区使用指定的管道大小。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 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)
接收一个字节的数据。-
Methods inherited from class java.io.InputStream
mark, markSupported, read, readAllBytes, readNBytes, reset, skip, transferTo
-
-
-
-
字段详细信息
-
PIPE_SIZE
protected static final int PIPE_SIZE
管道循环输入缓冲区的默认大小。- 从以下版本开始:
- 1.1
- 另请参见:
- Constant Field Values
-
buffer
protected byte[] buffer
传入数据的循环缓冲区。- 从以下版本开始:
- 1.1
-
in
protected int in
在从连接的管道输出流接收到的数据的下一个字节将被存储的循环缓冲区中的位置的索引。in<0
意味着缓冲区是空的,in==out
意味着缓冲区已满- 从以下版本开始:
- 1.1
-
out
protected int out
循环缓冲区中的位置的索引,在该缓冲区中下一个字节的数据将被该管道输入流读取。- 从以下版本开始:
- 1.1
-
-
构造方法详细信息
-
PipedInputStream
public PipedInputStream(PipedOutputStream src) throws IOException
创建一个PipedInputStream
,使其连接到管道输出流src
。 写入src
数据字节将作为此流的输入。- 参数
-
src
- 要连接的流。 - 异常
-
IOException
- 如果发生I / O错误。
-
PipedInputStream
public PipedInputStream(PipedOutputStream src, int pipeSize) throws IOException
创建一个PipedInputStream
,使其连接到管道输出流src
并为管道缓冲区使用指定的管道大小。 写入src
数据字节将作为此流的输入。- 参数
-
src
- 要连接的流。 -
pipeSize
- 管道缓冲区的大小。 - 异常
-
IOException
- 如果发生I / O错误。 -
IllegalArgumentException
- 如果是pipeSize <= 0
。 - 从以下版本开始:
- 1.6
-
PipedInputStream
public PipedInputStream()
-
PipedInputStream
public PipedInputStream(int pipeSize)
创建一个PipedInputStream
,使它还不是connected,并使用指定的管道大小作为管道的缓冲区。 在使用前必须是connected到PipedOutputStream
。- 参数
-
pipeSize
- 管道缓冲区的大小。 - 异常
-
IllegalArgumentException
- 如果是pipeSize <= 0
。 - 从以下版本开始:
- 1.6
-
-
方法详细信息
-
connect
public void connect(PipedOutputStream src) throws IOException
使此管道输入流连接到管道输出流src
。 如果此对象已连接到其他管道输出流,则抛出IOException
。如果
src
是未连接的管道输出流,并且snk
是未连接的管道输入流,则可以通过以下任一方式连接它们:snk.connect(src)
或电话:
src.connect(snk)
两个电话有相同的效果。
- 参数
-
src
- 连接到管道输出流。 - 异常
-
IOException
- 如果发生I / O错误。
-
receive
protected void receive(int b) throws IOException
接收一个字节的数据。 如果没有输入可用,此方法将阻止。- 参数
-
b
- 正在接收的字节 - 异常
-
IOException
-如果管道是broken
,unconnected
,关闭,或者如果发生I / O错误。 - 从以下版本开始:
- 1.1
-
read
public int read() throws IOException
从这个管道输入流读取数据的下一个字节。 值字节作为int
返回到0
到255
。 该方法阻塞直到输入数据可用,检测到流的结尾,或抛出异常。- Specified by:
-
read
在InputStream
- 结果
-
数据的下一个字节,如果达到流的末尾,
-1
。 - 异常
-
IOException
-如果管道是unconnected
,broken
,关闭,或者如果发生I / O错误。
-
read
public int read(byte[] b, int off, int len) throws IOException
从这个管道输入流读取最多len
个字节的数据到字节数组。 如果达到数据流的结尾,或者如果len
超过了管道的缓冲区大小,则读取少于len
个字节。 如果len
为零,则不读取字节并返回0; 否则,该方法将阻塞,直到输入的至少1个字节可用,已经检测到流的结尾,或抛出异常。- 重写:
-
read
在InputStream
- 参数
-
b
- 读取数据的缓冲区。 -
off
- 目标阵列b
的起始偏移量 -
len
- 读取的最大字节数。 - 结果
-
读取到缓冲区的总字节数,如果没有更多的数据,因为已经到达流的末尾,那么这个字节是
-1
。 - 异常
-
NullPointerException
- 如果b
是null
。 -
IndexOutOfBoundsException
- 如果off
为负数,则len
为负数,或len
大于b.length - off
-
IOException
-如果管道是broken
,unconnected
,关闭,或者如果发生I / O错误。 - 另请参见:
-
InputStream.read()
-
available
public int available() throws IOException
返回可以从该输入流读取而不阻塞的字节数。- 重写:
-
available
在类InputStream
- 结果
-
可以从该输入流无阻塞读取,或字节数
0
该输入流是否已调用它的关闭close()
方法,或者如果管道是unconnected
,或broken
。 - 异常
-
IOException
- 如果发生I / O错误。 - 从以下版本开始:
- 1.0.2
-
close
public void close() throws IOException
关闭此管道输入流,并释放与流相关联的任何系统资源。- Specified by:
-
close
在接口AutoCloseable
- Specified by:
-
close
在接口Closeable
- 重写:
-
close
在InputStream
- 异常
-
IOException
- 如果发生I / O错误。
-
-