InputStream that converts characters from a Reader into bytes using an
arbitrary Charset.
This is an alternative to copying the data to an OutputStream via a Writer,
which is necessarily blocking. By implementing an InputStream it allows consumers to
"pull" as much data as they can handle, which is more convenient when dealing with flow
controlled, async APIs.
| Modifier and Type | Field and Description |
|---|---|
| private ByteBuffer | byteBuffer
byteBuffer holds encoded characters that have not yet been sent to the caller of the input stream. |
| private CharBuffer | charBuffer
charBuffer holds characters that have been read from the Reader but not encoded yet. |
| private boolean | doneFlushing
Whether we've successfully flushed the encoder. |
| private boolean | draining
Whether we're copying encoded bytes to the caller's buffer. |
| private final CharsetEncoder | |
| private boolean | endOfInput
Whether we've finished reading the reader. |
| private final Reader | |
| private final byte[] |
| Access | Constructor and Description |
|---|---|
| pack-priv | ReaderInputStream(Reader
input source reader, Charset character set used for encoding chars to bytes charset, int size of internal input and output buffers bufferSize)Creates a new input stream that will encode the characters from |
| pack-priv | ReaderInputStream(Reader
input source reader, CharsetEncoder character set encoder used for encoding chars to bytes encoder, int size of internal input and output buffers bufferSize)Creates a new input stream that will encode the characters from |
| Modifier and Type | Method and Description |
|---|---|
| private static int | |
| public void | close()
Overrides java. Implements java. |
| private int | drain(byte[] b, int off, int len)
Copy as much of the byte buffer into the output array as possible, returning the (positive) number of characters copied. |
| private static CharBuffer | |
| public int | read()
Implements abstract java. |
| public int | read(byte[]
the buffer into which the data is read. b, int the start offset in array off, int b
at which the data is written.the maximum number of bytes to read. len)Overrides java. len bytes of data from the input stream into
an array of bytes.
|
| private void | |
| private void | startDraining(boolean overflow)
Flips the buffer output buffer so we can start reading bytes from it. |
| byteBuffer | back to summary |
|---|---|
| private ByteBuffer byteBuffer byteBuffer holds encoded characters that have not yet been sent to the caller of the input stream. When encoding it is "unflipped" (encoded bytes between 0 and position) and when draining it is flipped (undrained bytes between position and limit). | |
| charBuffer | back to summary |
|---|---|
| private CharBuffer charBuffer charBuffer holds characters that have been read from the Reader but not encoded yet. The buffer is perpetually "flipped" (unencoded characters between position and limit). | |
| doneFlushing | back to summary |
|---|---|
| private boolean doneFlushing Whether we've successfully flushed the encoder. | |
| draining | back to summary |
|---|---|
| private boolean draining Whether we're copying encoded bytes to the caller's buffer. | |
| encoder | back to summary |
|---|---|
| private final CharsetEncoder encoder | |
| endOfInput | back to summary |
|---|---|
| private boolean endOfInput Whether we've finished reading the reader. | |
| reader | back to summary |
|---|---|
| private final Reader reader | |
| singleByte | back to summary |
|---|---|
| private final byte[] singleByte | |
| ReaderInputStream | back to summary |
|---|---|
| pack-priv ReaderInputStream(Reader reader, Charset charset, int bufferSize) Creates a new input stream that will encode the characters from
| |
| ReaderInputStream | back to summary |
|---|---|
| pack-priv ReaderInputStream(Reader reader, CharsetEncoder encoder, int bufferSize) Creates a new input stream that will encode the characters from
| |
| availableCapacity | back to summary |
|---|---|
| private static int availableCapacity(Buffer buffer) Returns the number of elements between the limit and capacity. | |
| close | back to summary |
|---|---|
| public void close() throws IOException Overrides java. Implements java. Doc from java. Closes this input stream and releases any system resources associated with the stream.
| |
| drain | back to summary |
|---|---|
| private int drain(byte[] b, int off, int len) Copy as much of the byte buffer into the output array as possible, returning the (positive) number of characters copied. | |
| grow | back to summary |
|---|---|
| private static CharBuffer grow(CharBuffer buf) Returns a new CharBuffer identical to buf, except twice the capacity. | |
| read | back to summary |
|---|---|
| public int read() throws IOException Implements abstract java. Doc from java. Reads the next byte of data from the input stream. The value byte is
returned as an
| |
| read | back to summary |
|---|---|
| public int read(byte[] b, int off, int len) throws IOException Overrides java. Doc from java. Reads up to This method blocks until input data is available, end of file is detected, or an exception is thrown. If The first byte read is stored into element In every case, elements
| |
| readMoreChars | back to summary |
|---|---|
| private void readMoreChars() throws IOException Handle the case of underflow caused by needing more input characters. | |
| startDraining | back to summary |
|---|---|
| private void startDraining(boolean overflow) Flips the buffer output buffer so we can start reading bytes from it. If we are starting to drain because there was overflow, and there aren't actually any characters to drain, then the overflow must be due to a small output buffer. | |