UTF32Reader
Date: 2016-12-03

com.fasterxml.jackson.core.io

## Class UTF32Reader

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

- All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, java.lang.Readable

      public class UTF32Reader
      extends java.io.Reader

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

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `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 java.io.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, java.io.InputStream in, byte[] buf, int ptr, int len, boolean isBigEndian)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `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 java.io.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,
                     java.io.InputStream in,
                     byte[] buf,
                     int ptr,
                     int len,
                     boolean isBigEndian)

  - ### Method Detail

    - #### close

          public void close()
                     throws java.io.IOException

      Specified by:
        `close` in interface `java.io.Closeable`
      Specified by:
        `close` in interface `java.lang.AutoCloseable`
      Specified by:
        `close` in class `java.io.Reader`
      Throws:
        `java.io.IOException`

    - #### read

          public int read()
                   throws java.io.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 `java.io.Reader`
      Throws:
        `java.io.IOException`

    - #### read

          public int read(char[] cbuf,
                 int start,
                 int len)
                   throws java.io.IOException

      Specified by:
        `read` in class `java.io.Reader`
      Throws:
        `java.io.IOException`