com.fasterxml.jackson.core.io

## Class UTF32Reader

- java.lang.Object
- - java.io.Reader
  - - com.fasterxml.jackson.core.io.UTF32Reader

All Implemented Interfaces:
  Closeable, AutoCloseable, Readable

    public class UTF32Reader
    extends Reader

Since JDK does not come with UTF-32/UCS-4, let's implement a simple decoder to use.

### Field Summary

Fields
`protected boolean` `_bigEndian`
`protected byte[]` `_buffer`
`protected int` `_byteCount` Total read byte count; used for error reporting purposes
`protected int` `_charCount` Total read character count; used for error reporting purposes
`protected IOContext` `_context`
`protected InputStream` `_in`
`protected int` `_length`
`protected boolean` `_managedBuffers`
`protected int` `_ptr`
`protected char` `_surrogate` Although input is fine with full Unicode set, Java still uses 16-bit chars, so we may have to split high-order chars into surrogate pairs.
`protected char[]` `_tmpBuf`
`protected static int` `LAST_VALID_UNICODE_CHAR` JSON actually limits available Unicode range in the high end to the same as xml (to basically limit UTF-8 max byte sequence length to 4)
`protected static char` `NC`

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

`lock`

### Constructor Summary

Constructors
Constructor and Description
`UTF32Reader(IOContext ctxt, InputStream in, byte[] buf, int ptr, int len, boolean isBigEndian)`

### Method Summary

Methods
`void` `close()`
`int` `read()` Although this method is implemented by the base class, AND it should never be called by main code, let's still implement it bit more efficiently just in case
`int` `read(char[] cbuf, int start, int len)`

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

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

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

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

### Field Detail

#### LAST_VALID_UNICODE_CHAR

    protected static final int LAST_VALID_UNICODE_CHAR

JSON actually limits available Unicode range in the high end to the same as xml (to basically limit UTF-8 max byte sequence length to 4)

See Also:
  Constant Field Values

#### NC

    protected static final char NC

See Also:
  Constant Field Values

#### _context

    protected final IOContext _context

#### _in

    protected InputStream _in

#### _buffer

    protected byte[] _buffer

#### _ptr

    protected int _ptr

#### _length

    protected int _length

#### _bigEndian

    protected final boolean _bigEndian

#### _surrogate

    protected char _surrogate

Although input is fine with full Unicode set, Java still uses 16-bit chars, so we may have to split high-order chars into surrogate pairs.

#### _charCount

    protected int _charCount

Total read character count; used for error reporting purposes

#### _byteCount

    protected int _byteCount

Total read byte count; used for error reporting purposes

#### _managedBuffers

    protected final boolean _managedBuffers

#### _tmpBuf

    protected char[] _tmpBuf

### Constructor Detail

#### UTF32Reader

    public UTF32Reader(IOContext ctxt,
               InputStream in,
               byte[] buf,
               int ptr,
               int len,
               boolean isBigEndian)

### 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 main 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,
           int start,
           int len)
             throws IOException

Specified by:
  `read` in class `Reader`
Throws:
  `IOException`