Module java.base
Package java.io

Class PipedInputStream

java.lang.Object
java.io.InputStream
java.io.PipedInputStream
所有已实现的接口:
Closeable, AutoCloseable

public class PipedInputStream extends InputStream
管道输入流应连接到管道输出流;然后管道输入流提供写入管道输出流的任何数据字节。通常,数据从一个线程通过PipedInputStream对象读取,数据由另一个线程写入相应的PipedOutputStream。不建议尝试从单个线程中使用这两个对象,因为这可能会导致线程死锁。管道输入流包含一个缓冲区,将读操作与写操作解耦,但有一定限制。如果提供数据字节给连接的管道输出流的线程不再活动,则管道被称为 broken
自从:
1.0
参见:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected byte[]
    放置传入数据的循环缓冲区。
    protected int
    in
    当从连接的管道输出流接收到数据字节时,下一个数据字节将存储在循环缓冲区中的位置索引。
    protected int
    out
    从此管道输入流读取下一个数据字节的位置索引。
    protected static final int
    管道的循环输入缓冲区的默认大小。
  • Constructor Summary

    Constructors
    Constructor
    Description
    创建一个PipedInputStream,使其尚未连接
    PipedInputStream(int pipeSize)
    创建一个PipedInputStream,使其尚未连接,并为管道的缓冲区使用指定的管道大小。
    创建一个PipedInputStream,使其连接到管道输出流src
    PipedInputStream(PipedOutputStream src, int pipeSize)
    创建一个PipedInputStream,使其连接到管道输出流src,并为管道的缓冲区使用指定的管道大小。
  • Method Summary

    Modifier and Type
    Method
    Description
    int
    返回可以从此输入流中读取而不阻塞的字节数。
    void
    close()
    关闭此输入流并释放与流关联的任何系统资源。
    void
    使此管道输入流连接到管道输出流src
    int
    read()
    从此管道输入流读取下一个数据字节。
    int
    read(byte[] b, int off, int len)
    从此管道输入流中读取最多len字节的数据到字节数组中。
    protected void
    receive(int b)
    接收一个数据字节。

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • PIPE_SIZE

      protected static final int PIPE_SIZE
      管道的循环输入缓冲区的默认大小。
      自从:
      1.1
      参见:
    • buffer

      protected byte[] buffer
      放置传入数据的循环缓冲区。
      自从:
      1.1
    • in

      protected int in
      当从连接的管道输出流接收到数据字节时,下一个数据字节将存储在循环缓冲区中的位置索引。in < 0表示缓冲区为空,in == out表示缓冲区已满。
      自从:
      1.1
    • out

      protected int out
      从此管道输入流读取下一个数据字节的位置索引。
      自从:
      1.1
  • Constructor Details

    • 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,使其尚未连接。在使用之前,必须将其连接PipedOutputStream
    • PipedInputStream

      public PipedInputStream(int pipeSize)
      创建一个PipedInputStream,使其尚未连接,并为管道的缓冲区使用指定的管道大小。在使用之前,必须将其连接PipedOutputStream
      参数:
      pipeSize - 管道缓冲区的大小。
      抛出:
      IllegalArgumentException - 如果pipeSize <= 0
      自从:
      1.6
  • Method Details

    • 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 - 如果管道 brokenunconnected,关闭,或者发生I/O错误。
      自从:
      1.1
    • read

      public int read() throws IOException
      从此管道输入流读取下一个数据字节。值字节作为int返回,范围为0255。此方法将阻塞,直到有输入数据可用,检测到流的结束,或抛出异常。
      指定者:
      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 - 如果bnull
      IndexOutOfBoundsException - 如果off为负数,len为负数,或者len大于b.length - off
      IOException - 如果管道 brokenunconnected,关闭,或者发生I/O错误。
      参见:
    • available

      public int available() throws IOException
      返回可以从此输入流中读取而不阻塞的字节数。
      覆盖:
      available 在类 InputStream
      返回:
      可从此输入流中读取而不阻塞的字节数,如果通过调用其close()方法关闭了此输入流,或者管道是未连接,或者 损坏,则返回0
      抛出:
      IOException - 如果发生I/O错误。
      自:
      1.0.2
    • close

      public void close() throws IOException
      关闭此输入流并释放与流相关的任何系统资源。
      指定者:
      close 在接口 AutoCloseable
      指定者:
      close 在接口 Closeable
      覆盖:
      close 在类 InputStream
      抛出:
      IOException - 如果发生I/O错误。