Package org.apache.commons.io.input
Class QueueInputStream
java.lang.Object
java.io.InputStream
org.apache.commons.io.input.QueueInputStream
- All Implemented Interfaces:
Closeable
,AutoCloseable
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:
-
Nested Class Summary
Nested Classes -
Constructor Summary
ConstructorsConstructorDescriptionConstructs a new instance with no limit to its internal queue size and zero timeout.QueueInputStream
(BlockingQueue<Integer> blockingQueue) Deprecated. -
Method Summary
Modifier and TypeMethodDescriptionstatic QueueInputStream.Builder
builder()
Constructs a newQueueInputStream.Builder
.Constructs a new QueueOutputStream instance connected to this.int
read()
Reads and returns a single byte.int
read
(byte[] b, int offset, int length) Reads up tolength
bytes of data from the input stream into an array of bytes.Methods inherited from class java.io.InputStream
available, close, mark, markSupported, read, reset, skip
-
Constructor Details
-
QueueInputStream
public QueueInputStream()Constructs a new instance with no limit to its internal queue size and zero timeout. -
QueueInputStream
Deprecated.Constructs a new instance with given queue and zero timeout.- Parameters:
blockingQueue
- backing queue for the stream, null maps to a new blocking queue instance.
-
-
Method Details
-
builder
Constructs a newQueueInputStream.Builder
.- Returns:
- a new
QueueInputStream.Builder
. - Since:
- 2.12.0
-
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
Reads and returns a single byte.- Specified by:
read
in classInputStream
- Returns:
- the byte read, or
-1
if a timeout occurs before a queue element is available. - Throws:
IllegalStateException
- if thread is interrupted while waiting.
-
read
Reads up tolength
bytes of data from the input stream into an array of bytes. The first byte is read while honoring the timeout; the rest are read while not honoring the timeout. The number of bytes actually read is returned as an integer.- Overrides:
read
in classInputStream
- Parameters:
b
- the buffer into which the data is read.offset
- the start offset in arrayb
at which the data is written.length
- the maximum number of bytes to read.- Returns:
- 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
- Ifb
isnull
.IllegalStateException
- if thread is interrupted while waiting for the first byte.IndexOutOfBoundsException
- ifoffset
is negative,length
is negative, orlength
is greater thanb.length - offset
.- Since:
- 2.20.0
-
builder()
,QueueInputStream.Builder
, andQueueInputStream.Builder.get()
.