Class QueueInputStream

java.lang.Object
java.io.InputStream
org.apache.commons.io.input.QueueInputStream
All Implemented Interfaces:
Closeable, AutoCloseable

public class QueueInputStream extends InputStream
Simple alternative to JDK PipedInputStream; queue input stream provides what's written in queue output stream.

To build an instance, use QueueInputStream.Builder.

Example usage:

 QueueInputStream inputStream = new QueueInputStream();
 QueueOutputStream outputStream = inputStream.newQueueOutputStream();

 outputStream.write("hello world".getBytes(UTF_8));
 inputStream.read();
 

Unlike JDK PipedInputStream and PipedOutputStream, queue input/output streams may be used safely in a single thread or multiple threads. Also, unlike JDK classes, no special meaning is attached to initial or current thread. Instances can be used longer after initial threads exited.

Closing a QueueInputStream has no effect. The methods in this class can be called after the stream has been closed without generating an IOException.

Since:
2.9.0
See Also:
  • Field Details

    • blockingQueue

      private final BlockingQueue<Integer> blockingQueue
    • timeoutNanos

      private final long timeoutNanos
  • Constructor Details

    • QueueInputStream

      public QueueInputStream()
      Constructs a new instance with no limit to its internal queue size and zero timeout.
    • QueueInputStream

      @Deprecated public QueueInputStream(BlockingQueue<Integer> blockingQueue)
      Constructs a new instance with given queue and zero timeout.
      Parameters:
      blockingQueue - backing queue for the stream.
    • QueueInputStream

      private QueueInputStream(BlockingQueue<Integer> blockingQueue, Duration timeout)
      Constructs a new instance with given queue and timeout.
      Parameters:
      blockingQueue - backing queue for the stream.
      timeout - how long to wait before giving up when polling the queue.
  • Method Details

    • builder

      public static QueueInputStream.Builder builder()
      Constructs a new QueueInputStream.Builder.
      Returns:
      a new QueueInputStream.Builder.
      Since:
      2.12.0
    • getBlockingQueue

      BlockingQueue<Integer> getBlockingQueue()
      Gets the blocking queue.
      Returns:
      the blocking queue.
    • getTimeout

      Duration getTimeout()
      Gets the timeout duration.
      Returns:
      the timeout duration.
    • newQueueOutputStream

      public QueueOutputStream newQueueOutputStream()
      Constructs a new QueueOutputStream instance connected to this. Writes to the output stream will be visible to this input stream.
      Returns:
      QueueOutputStream connected to this stream.
    • read

      public int read()
      Reads and returns a single byte.
      Specified by:
      read in class InputStream
      Returns:
      the byte read, or -1 if a timeout occurs before a queue element is available.
      Throws:
      IllegalStateException - if thread is interrupted while waiting.