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
    private final boolean
     
    protected final byte[][]
     
    protected static final ThreadLocal<SoftReference<byte[][]>>
    This ThreadLocal contains a java.lang.ref.SoftRerefence to a byte array used for holding content to decode
    (package private) int
    Total read byte count; used for error reporting purposes
    (package private) int
    Total read character count; used for error reporting purposes
    protected byte[]
     
    protected int
    Pointed to the end marker, that is, position one after the last valid available byte.
    protected int
    Pointer to the next available byte (if any), iff less than mByteBufferEnd
    private InputStream
     
    protected int
    Decoded first character of a surrogate pair, if one needs to be buffered
    private char[]
     
    private static final int
     

    Fields inherited from class java.io.Reader

    lock
  • Constructor Summary

    Constructors
    Constructor
    Description
    UTF8Reader(byte[] buf, int ptr, int len, boolean autoClose)
     
    UTF8Reader(InputStream in, boolean autoClose)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    private static byte[][]
     
    void
     
    final void
    This method should be called along with (or instead of) normal close.
    protected final InputStream
     
    private boolean
    loadMore(int available)
     
    int
    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
    int
    read(char[] cbuf)
     
    int
    read(char[] cbuf, int start, int len)
     
    protected final int
    Method for reading as many bytes from the underlying stream as possible (that fit in the buffer), to the beginning of the buffer.
    protected final int
    readBytesAt(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 void
    reportBounds(char[] cbuf, int start, int len)
     
    private void
    reportInvalidInitial(int mask, int offset)
     
    private void
    reportInvalidOther(int mask, int offset)
     
    protected void
     
    private void
    reportUnexpectedEOF(int gotBytes, int needed)
     

    Methods inherited from class java.io.Reader

    mark, markSupported, nullReader, read, ready, reset, skip, transferTo

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • DEFAULT_BUFFER_SIZE

      private static final int DEFAULT_BUFFER_SIZE
      See Also:
    • _bufferRecycler

      protected static final ThreadLocal<SoftReference<byte[][]>> _bufferRecycler
      This ThreadLocal contains a java.lang.ref.SoftRerefence to a byte array used for holding content to decode
    • _bufferHolder

      protected final byte[][] _bufferHolder
    • _inputSource

      private InputStream _inputSource
    • _autoClose

      private final boolean _autoClose
    • _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
    • _charCount

      int _charCount
      Total read character count; used for error reporting purposes
    • _byteCount

      int _byteCount
      Total read byte count; used for error reporting purposes
    • _tmpBuffer

      private char[] _tmpBuffer
  • Constructor Details

    • UTF8Reader

      public UTF8Reader(InputStream in, boolean autoClose)
    • UTF8Reader

      public UTF8Reader(byte[] buf, int ptr, int len, boolean autoClose)
  • Method Details

    • _findBufferHolder

      private static byte[][] _findBufferHolder()
    • close

      public void close() throws IOException
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Specified by:
      close in class Reader
      Throws:
      IOException
    • 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
    • read

      public int read(char[] cbuf) throws IOException
      Overrides:
      read in class Reader
      Throws:
      IOException
    • read

      public int read(char[] cbuf, int start, int len) throws IOException
      Specified by:
      read in class Reader
      Throws:
      IOException
    • getStream

      protected final InputStream getStream()
    • 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).
    • reportInvalidInitial

      private void reportInvalidInitial(int mask, int offset) throws IOException
      Throws:
      IOException
    • reportInvalidOther

      private void reportInvalidOther(int mask, int offset) throws IOException
      Throws:
      IOException
    • reportUnexpectedEOF

      private void reportUnexpectedEOF(int gotBytes, int needed) throws IOException
      Throws:
      IOException
    • loadMore

      private boolean loadMore(int available) throws IOException
      Parameters:
      available - Number of "unused" bytes in the input buffer
      Returns:
      True, if enough bytes were read to allow decoding of at least one full character; false if EOF was encountered instead.
      Throws:
      IOException
    • reportBounds

      protected void reportBounds(char[] cbuf, int start, int len) throws IOException
      Throws:
      IOException
    • reportStrangeStream

      protected void reportStrangeStream() throws IOException
      Throws:
      IOException