com.fasterxml.jackson.dataformat.yaml

## 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
`protected byte[][]` `_bufferHolder`
`protected static ThreadLocal<SoftReference<byte[][]>>` `_bufferRecycler` This `ThreadLocal` contains a `SoftReference` to a byte array used for holding content to decode
`protected byte[]` `_inputBuffer`
`protected int` `_inputEnd` Pointed to the end marker, that is, position one after the last valid available byte.
`protected int` `_inputPtr` Pointer to the next available byte (if any), iff less than `mByteBufferEnd`
`protected int` `_surrogate` Decoded first character of a surrogate pair, if one needs to be buffered

### Fields inherited from class java.io.Reader

`lock`

### Constructor Summary

Constructors
Constructor and Description
`UTF8Reader(byte[] buf, int ptr, int len, boolean autoClose)`
`UTF8Reader(InputStream in, boolean autoClose)`

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `close()`
`void` `freeBuffers()` This method should be called along with (or instead of) normal close.
`protected InputStream` `getStream()`
`int` `read()` 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 int` `readBytes()` Method for reading as many bytes from the underlying stream as possible (that fit in the buffer), to the beginning of the buffer.
`protected 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)`
`protected void` `reportStrangeStream()`

### Methods inherited from class java.io.Reader

`mark, markSupported, read, ready, reset, skip`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### _bufferRecycler

    protected static final ThreadLocal<SoftReference<byte[][]>> _bufferRecycler

This `ThreadLocal` contains a `SoftReference` 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

#### close

    public void close()
               throws IOException

Specified by:
  `close` in interface `Closeable`
Specified by:
  `close` in interface `AutoCloseable`
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).

#### reportBounds

    protected void reportBounds(char[] cbuf,
                                int start,
                                int len)
                         throws IOException

Throws:
  `IOException`

#### reportStrangeStream

    protected void reportStrangeStream()
                                throws IOException

Throws:
  `IOException`