edu.northwestern.at.utils

## Class UnicodeReader

- java.lang.Object
- - java.io.Reader
  - - edu.northwestern.at.utils.UnicodeReader

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

      public class UnicodeReader
      extends java.io.Reader

  Generic unicode text reader.

  Uses BOM mark to identify the encoding to be used. When BOM is not found, uses given default or system encoding.

  Original pseudocode : Thomas Weidenfeller
  Implementation tweaked: Aki Nieminen

  http://www.unicode.org/unicode/faq/utf_bom.html
  BOMs:
  00 00 FE FF = UTF-32, big-endian
  FF FE 00 00 = UTF-32, little-endian
  EF BB BF = UTF-8,
  FE FF = UTF-16, big-endian
  FF FE = UTF-16, little-endian

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `(package private) java.lang.String` | `defaultEnc`
    `(package private) java.io.PushbackInputStream` | `internalIn`
    `(package private) java.io.InputStreamReader` | `internalIn2`

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

      `lock`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `UnicodeReader(java.io.InputStream in)` Create Unicode reader.
    `UnicodeReader(java.io.InputStream in, java.lang.String defaultEnc)` Create Unicode reader.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `close()`
    `java.lang.String` | `getDefaultEncoding()`
    `java.lang.String` | `getEncoding()` Get stream encoding or NULL if stream is uninitialized.
    `protected void` | `init()` Read-ahead four bytes and check for BOM marks.
    `int` | `read(char[] cbuf, int off, int len)`

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

      `mark, markSupported, read, 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

    - #### internalIn2

          java.io.InputStreamReader internalIn2

    - #### defaultEnc

          java.lang.String defaultEnc

    - #### internalIn

          java.io.PushbackInputStream internalIn

  - ### Constructor Detail

    - #### UnicodeReader

          public UnicodeReader(java.io.InputStream in)

      Create Unicode reader.
      Parameters:
        `in` - inputstream to be read

    - #### UnicodeReader

          public UnicodeReader(java.io.InputStream in,
                       java.lang.String defaultEnc)

      Create Unicode reader.
      Parameters:
        `in` - inputstream to be read
        `defaultEnc` - default encoding if stream does not have BOM marker. Give NULL to use system-level default.

  - ### Method Detail

    - #### getDefaultEncoding

          public java.lang.String getDefaultEncoding()

    - #### getEncoding

          public java.lang.String getEncoding()

      Get stream encoding or NULL if stream is uninitialized. Call init() or read() method to initialize it.

    - #### init

          protected void init()
                       throws java.io.IOException

      Read-ahead four bytes and check for BOM marks. Extra bytes are unread back to the stream, only BOM bytes are skipped.
      Throws:
        `java.io.IOException`

    - #### 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(char[] cbuf,
                 int off,
                 int len)
                   throws java.io.IOException

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