Class UTF8Reader
- java.lang.Object
-
- java.io.Reader
-
- com.fasterxml.jackson.dataformat.yaml.UTF8Reader
-
- All Implemented Interfaces:
Closeable,AutoCloseable,Readable
public final class UTF8Reader extends Reader
Optimized Reader that reads UTF-8 encoded content from an input stream. In addition to doing (hopefully) optimal conversion, it can also take array of "pre-read" (leftover) bytes; this is necessary when preliminary stream/reader is trying to figure out underlying character encoding.
-
-
Field Summary
Fields Modifier and Type Field Description protected byte[][]_bufferHolderprotected static ThreadLocal<SoftReference<byte[][]>>_bufferRecyclerThisThreadLocalcontains aSoftRerefenceto a byte array used for holding content to decodeprotected byte[]_inputBufferprotected int_inputEndPointed to the end marker, that is, position one after the last valid available byte.protected int_inputPtrPointer to the next available byte (if any), iff less thanmByteBufferEndprotected int_surrogateDecoded first character of a surrogate pair, if one needs to be buffered
-
Constructor Summary
Constructors Constructor Description UTF8Reader(byte[] buf, int ptr, int len, boolean autoClose)UTF8Reader(InputStream in, boolean autoClose)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclose()voidfreeBuffers()This method should be called along with (or instead of) normal close.protected InputStreamgetStream()intread()Although this method is implemented by the base class, AND it should never be called by Woodstox code, let's still implement it bit more efficiently just in caseintread(char[] cbuf)intread(char[] cbuf, int start, int len)protected intreadBytes()Method for reading as many bytes from the underlying stream as possible (that fit in the buffer), to the beginning of the buffer.protected intreadBytesAt(int offset)Method for reading as many bytes from the underlying stream as possible (that fit in the buffer considering offset), to the specified offset.protected voidreportBounds(char[] cbuf, int start, int len)protected voidreportStrangeStream()-
Methods inherited from class java.io.Reader
mark, markSupported, nullReader, read, ready, reset, skip, transferTo
-
-
-
-
Field Detail
-
_bufferRecycler
protected static final ThreadLocal<SoftReference<byte[][]>> _bufferRecycler
ThisThreadLocalcontains aSoftRerefenceto a byte array used for holding content to decode
-
_bufferHolder
protected final byte[][] _bufferHolder
-
_inputBuffer
protected byte[] _inputBuffer
-
_inputPtr
protected int _inputPtr
Pointer to the next available byte (if any), iff less thanmByteBufferEnd
-
_inputEnd
protected int _inputEnd
Pointed to the end marker, that is, position one after the last valid available byte.
-
_surrogate
protected int _surrogate
Decoded first character of a surrogate pair, if one needs to be buffered
-
-
Constructor Detail
-
UTF8Reader
public UTF8Reader(InputStream in, boolean autoClose)
-
UTF8Reader
public UTF8Reader(byte[] buf, int ptr, int len, boolean autoClose)
-
-
Method Detail
-
close
public void close() throws IOException- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Specified by:
closein classReader- Throws:
IOException
-
read
public int read() throws IOExceptionAlthough this method is implemented by the base class, AND it should never be called by Woodstox code, let's still implement it bit more efficiently just in case- Overrides:
readin classReader- Throws:
IOException
-
read
public int read(char[] cbuf) throws IOException- Overrides:
readin classReader- Throws:
IOException
-
read
public int read(char[] cbuf, int start, int len) throws IOException- Specified by:
readin classReader- Throws:
IOException
-
getStream
protected final InputStream getStream()
-
readBytes
protected final int readBytes() throws IOExceptionMethod for reading as many bytes from the underlying stream as possible (that fit in the buffer), to the beginning of the buffer.- Returns:
- Number of bytes read, if any; -1 for end-of-input.
- Throws:
IOException
-
readBytesAt
protected final int readBytesAt(int offset) throws IOExceptionMethod for reading as many bytes from the underlying stream as possible (that fit in the buffer considering offset), to the specified offset.- Returns:
- Number of bytes read, if any; -1 to indicate none available (that is, end of input)
- Throws:
IOException
-
freeBuffers
public final void freeBuffers()
This method should be called along with (or instead of) normal close. After calling this method, no further reads should be tried. Method will try to recycle read buffers (if any).
-
reportBounds
protected void reportBounds(char[] cbuf, int start, int len) throws IOException- Throws:
IOException
-
reportStrangeStream
protected void reportStrangeStream() throws IOException- Throws:
IOException
-
-