Class UTF32Reader

java.lang.Object
java.io.Reader
org.codehaus.jackson.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 Details

    • _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
    • 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:
    • NULL_CHAR

      protected static final char NULL_CHAR
      See Also:
    • NULL_BYTE

      protected static final char NULL_BYTE
      See Also:
    • _context

      protected final IOContext _context
    • _in

      protected InputStream _in
    • _buffer

      protected byte[] _buffer
    • _ptr

      protected int _ptr
    • _length

      protected int _length
    • _tmpBuf

      protected char[] _tmpBuf
  • Constructor Details

    • UTF32Reader

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

    • read

      public int read(char[] cbuf, int start, int len) throws IOException
      Specified by:
      read in class Reader
      Throws:
      IOException
    • 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 main code, let's still implement it bit more efficiently just in case
      Overrides:
      read in class Reader
      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