Package org.codehaus.jackson.io
Class UTF32Reader
java.lang.Object
java.io.Reader
org.codehaus.jackson.io.UTF32Reader
- All Implemented Interfaces:
Closeable
,AutoCloseable
,Readable
Since JDK does not come with UTF-32/UCS-4, let's implement a simple
decoder to use.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final boolean
protected byte[]
protected int
Total read byte count; used for error reporting purposesprotected int
Total read character count; used for error reporting purposesprotected final IOContext
protected InputStream
protected int
protected final boolean
protected int
protected char
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[]
protected static final int
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 final char
protected static final char
-
Constructor Summary
ConstructorsConstructorDescriptionUTF32Reader
(IOContext ctxt, InputStream in, byte[] buf, int ptr, int len, boolean isBigEndian) -
Method Summary
Modifier and TypeMethodDescriptionvoid
close()
final void
This method should be called along with (or instead of) normal 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 caseint
read
(char[] cbuf, int start, int len) protected void
reportBounds
(char[] cbuf, int start, int len) protected void
Methods inherited from class java.io.Reader
mark, markSupported, nullReader, read, read, ready, reset, skip, transferTo
-
Field Details
-
_bigEndian
protected final boolean _bigEndian -
_surrogate
protected char _surrogateAlthough 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 _charCountTotal read character count; used for error reporting purposes -
_byteCount
protected int _byteCountTotal read byte count; used for error reporting purposes -
_managedBuffers
protected final boolean _managedBuffers -
LAST_VALID_UNICODE_CHAR
protected static final int LAST_VALID_UNICODE_CHARJSON 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
-
_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
- Specified by:
read
in classReader
- Throws:
IOException
-
close
- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Specified by:
close
in classReader
- Throws:
IOException
-
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- Overrides:
read
in classReader
- 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
- Throws:
IOException
-
reportStrangeStream
- Throws:
IOException
-