Class NonBlockingInputStreamImpl
java.lang.Object
java.io.InputStream
org.jline.utils.NonBlockingInputStream
org.jline.utils.NonBlockingInputStreamImpl
- All Implemented Interfaces:
Closeable, AutoCloseable
This class wraps a regular input stream and allows it to appear as if it
is non-blocking; that is, reads can be performed against it that timeout
if no data is seen for a period of time. This effect is achieved by having
a separate thread perform all non-blocking read requests and then
waiting on the thread to complete.
VERY IMPORTANT NOTES
- This class is not thread safe. It expects at most one reader.
- The
shutdown()method must be called in order to shut down the thread that handles blocking I/O.
-
Field Summary
Fields inherited from class NonBlockingInputStream
closed, EOF, READ_EXPIRED -
Constructor Summary
ConstructorsConstructorDescriptionNonBlockingInputStreamImpl(String name, InputStream in) Creates aNonBlockingReaderout of a normal blocking reader. -
Method Summary
Methods inherited from class NonBlockingInputStream
checkClosed, peek, read, read, read, readBuffered, readBuffered, readBufferedMethods inherited from class InputStream
available, mark, markSupported, nullInputStream, read, readAllBytes, readNBytes, readNBytes, reset, skip, skipNBytes, transferTo
-
Constructor Details
-
NonBlockingInputStreamImpl
Creates aNonBlockingReaderout of a normal blocking reader. Note that this call also spawn a separate thread to perform the blocking I/O on behalf of the thread that is using this class. Theshutdown()method must be called in order to shut this thread down.- Parameters:
name- The stream namein- The reader to wrap
-
-
Method Details
-
shutdown
public void shutdown()Shuts down the thread that is handling blocking I/O. Note that if the thread is currently blocked waiting for I/O it will not actually shut down until the I/O is received.- Overrides:
shutdownin classNonBlockingInputStream
-
close
Description copied from class:NonBlockingInputStreamCloses this input stream and marks it as closed.Subsequent read operations behavior depends on the
PROP_CLOSE_MODEsetting:"strict"- ThrowClosedException"warn"- Log a warning but continue (default in JLine 3.x)"lenient"- Silently allow access
- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Overrides:
closein classNonBlockingInputStream- Throws:
IOException- if an I/O error occurs
-
read
Attempts to read a byte from the input stream for a specific period of time.- Specified by:
readin classNonBlockingInputStream- Parameters:
timeout- The amount of time to wait for the characterisPeek-trueif the byte read must not be consumed- Returns:
- The byte read, -1 if EOF is reached, or -2 if the read timed out.
- Throws:
IOException- if anything wrong happens
-