Package org.apache.velocity.io

# Class UnicodeInputStream

java.lang.Object
java.io.InputStream
org.apache.velocity.io.UnicodeInputStream

All Implemented Interfaces:
  `Closeable`, `AutoCloseable`

public class UnicodeInputStream extends InputStream
This is an input stream that is unicode BOM aware. This allows you to e.g. read Windows Notepad Unicode files as Velocity templates. It allows you to check the actual encoding of a file by calling `getEncodingFromStream()` on the input stream reader. This class is not thread safe! When more than one thread wants to use an instance of UnicodeInputStream, the caller must provide synchronization.

Since:
  1.5
Version:
  $Id$
Author:
  Aki Nieminen, Henning P. Schmiedehausen

## Field Summary

Fields
Modifier and Type
Field
Description
`static final org.apache.velocity.io.UnicodeInputStream.UnicodeBOM`
`UTF16BE_BOM`
BOM Marker for UTF 16, big endian.
`static final org.apache.velocity.io.UnicodeInputStream.UnicodeBOM`
`UTF16LE_BOM`
BOM Marker for UTF 16, little endian.
`static final org.apache.velocity.io.UnicodeInputStream.UnicodeBOM`
`UTF32BE_BOM`
BOM Marker for UTF 32, big endian.
`static final org.apache.velocity.io.UnicodeInputStream.UnicodeBOM`
`UTF32LE_BOM`
BOM Marker for UTF 32, little endian.
`static final org.apache.velocity.io.UnicodeInputStream.UnicodeBOM`
`UTF8_BOM`
BOM Marker for UTF 8.

## Constructor Summary

Constructors
Constructor
Description
`UnicodeInputStream(InputStream inputStream)`
Creates a new UnicodeInputStream object.
`UnicodeInputStream(InputStream inputStream, boolean skipBOM)`
Creates a new UnicodeInputStream object.

## Method Summary

Modifier and Type
Method
Description
`int`
`available()`
`void`
`close()`
`String`
`getEncodingFromStream()`
Read encoding based on BOM.
`boolean`
`isSkipBOM()`
Returns true if the input stream discards the BOM.
`void`
`mark(int readlimit)`
`boolean`
`markSupported()`
`int`
`read()`
`int`
`read(byte[] b)`
`int`
`read(byte[] b, int off, int len)`
`protected String`
`readEncoding()`
This method gets the encoding from the stream contents if a BOM exists.
`void`
`reset()`
`static boolean`
`sameEncoding(String left, String right)`
Helper function to compare encodings
`long`
`skip(long n)`

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

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

## Field Details

### UTF8_BOM

public static final org.apache.velocity.io.UnicodeInputStream.UnicodeBOM UTF8_BOM
BOM Marker for UTF 8. See http://www.unicode.org/unicode/faq/utf_bom.html

### UTF16LE_BOM

public static final org.apache.velocity.io.UnicodeInputStream.UnicodeBOM UTF16LE_BOM
BOM Marker for UTF 16, little endian. See http://www.unicode.org/unicode/faq/utf_bom.html

### UTF16BE_BOM

public static final org.apache.velocity.io.UnicodeInputStream.UnicodeBOM UTF16BE_BOM
BOM Marker for UTF 16, big endian. See http://www.unicode.org/unicode/faq/utf_bom.html

### UTF32LE_BOM

public static final org.apache.velocity.io.UnicodeInputStream.UnicodeBOM UTF32LE_BOM
BOM Marker for UTF 32, little endian. See http://www.unicode.org/unicode/faq/utf_bom.html

### UTF32BE_BOM

public static final org.apache.velocity.io.UnicodeInputStream.UnicodeBOM UTF32BE_BOM
BOM Marker for UTF 32, big endian. See http://www.unicode.org/unicode/faq/utf_bom.html

## Constructor Details

### UnicodeInputStream

public UnicodeInputStream(InputStream inputStream) throws IllegalStateException, IOException
Creates a new UnicodeInputStream object. Skips a BOM which defines the file encoding.

Parameters:
  `inputStream` - The input stream to use for reading.
Throws:
  `IllegalStateException`
  `IOException`

### UnicodeInputStream

public UnicodeInputStream(InputStream inputStream, boolean skipBOM) throws IllegalStateException, IOException
Creates a new UnicodeInputStream object.

Parameters:
  `inputStream` - The input stream to use for reading.
  `skipBOM` - If this is set to true, a BOM read from the stream is discarded. This parameter should normally be true.
Throws:
  `IllegalStateException`
  `IOException`

## Method Details

### isSkipBOM

public boolean isSkipBOM()
Returns true if the input stream discards the BOM.

Returns:
  True if the input stream discards the BOM.

### getEncodingFromStream

public String getEncodingFromStream()
Read encoding based on BOM.

Returns:
  The encoding based on the BOM.
Throws:
  `IllegalStateException` - When a problem reading the BOM occured.

### readEncoding

protected String readEncoding() throws IOException
This method gets the encoding from the stream contents if a BOM exists. If no BOM exists, the encoding is undefined.

Returns:
  The encoding of this streams contents as decided by the BOM or null if no BOM was found.
Throws:
  `IOException`

### close

public void close() throws IOException

Specified by:
  `close` in interface `AutoCloseable`
Specified by:
  `close` in interface `Closeable`
Overrides:
  `close` in class `InputStream`
Throws:
  `IOException`
See Also:
  - `InputStream.close()`

### available

public int available() throws IOException

Overrides:
  `available` in class `InputStream`
Throws:
  `IOException`
See Also:
  - `InputStream.available()`

### mark

public void mark(int readlimit)

Overrides:
  `mark` in class `InputStream`
Parameters:
  `readlimit` -
See Also:
  - `InputStream.mark(int)`

### markSupported

public boolean markSupported()

Overrides:
  `markSupported` in class `InputStream`
Returns:
  mark supported
See Also:
  - `InputStream.markSupported()`

### read

public int read() throws IOException

Specified by:
  `read` in class `InputStream`
Returns:
  read char
Throws:
  `IOException`
See Also:
  - `InputStream.read()`

### read

public int read(byte[] b) throws IOException

Overrides:
  `read` in class `InputStream`
Parameters:
  `b` - buffer
Returns:
  read chars count
Throws:
  `IOException`
See Also:
  - `InputStream.read(byte[])`

### read

public int read(byte[] b, int off, int len) throws IOException

Overrides:
  `read` in class `InputStream`
Parameters:
  `b` - buffer
  `off` - offset
  `len` - length
Returns:
  reac char
Throws:
  `IOException`
See Also:
  - `InputStream.read(byte[], int, int)`

### reset

public void reset() throws IOException

Overrides:
  `reset` in class `InputStream`
Throws:
  `IOException`
See Also:
  - `InputStream.reset()`

### skip

public long skip(long n) throws IOException

Overrides:
  `skip` in class `InputStream`
Parameters:
  `n` -
Returns:
  skipped count
Throws:
  `IOException`
See Also:
  - `InputStream.skip(long)`

### sameEncoding

public static boolean sameEncoding(String left, String right)
Helper function to compare encodings

Parameters:
  `left` -
  `right` -
Returns:
  true for same encoding