Class 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 Detail

      • _bufferRecycler

        protected static final ThreadLocal<SoftReference<byte[][]>> _bufferRecycler
        This ThreadLocal contains a SoftRerefence to 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 than mByteBufferEnd
      • _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

      • read

        public int read()
                 throws IOException
        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 case
        Overrides:
        read in class Reader
        Throws:
        IOException
      • readBytes

        protected final int readBytes()
                               throws IOException
        Method 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 IOException
        Method 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