org.apache.velocity.io
Class UnicodeInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by org.apache.velocity.io.UnicodeInputStream
All Implemented Interfaces:
Closeable

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: UnicodeInputStream.java 685685 2008-08-13 21:43:27Z nbubna $
Author:
Aki Nieminen, Henning P. Schmiedehausen

Field Summary
static org.apache.velocity.io.UnicodeInputStream.UnicodeBOM UTF16BE_BOM
          BOM Marker for UTF 16, big endian.
static org.apache.velocity.io.UnicodeInputStream.UnicodeBOM UTF16LE_BOM
          BOM Marker for UTF 16, little endian.
static org.apache.velocity.io.UnicodeInputStream.UnicodeBOM UTF32BE_BOM
          BOM Marker for UTF 32, big endian.
static org.apache.velocity.io.UnicodeInputStream.UnicodeBOM UTF32LE_BOM
          BOM Marker for UTF 32, little endian.
static org.apache.velocity.io.UnicodeInputStream.UnicodeBOM UTF8_BOM
          BOM Marker for UTF 8.
 
Constructor Summary
UnicodeInputStream(InputStream inputStream)
          Creates a new UnicodeInputStream object.
UnicodeInputStream(InputStream inputStream, boolean skipBOM)
          Creates a new UnicodeInputStream object.
 
Method Summary
 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()
           
 long skip(long n)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

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 TODO: Does Java actually support this?


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 TODO: Does Java actually support this?

Constructor Detail

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 Detail

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 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
See Also:
InputStream.mark(int)

markSupported

public boolean markSupported()
Overrides:
markSupported in class InputStream
See Also:
InputStream.markSupported()

read

public int read()
         throws IOException
Specified by:
read in class InputStream
Throws:
IOException
See Also:
InputStream.read()

read

public int read(byte[] b)
         throws IOException
Overrides:
read in class InputStream
Throws:
IOException
See Also:
InputStream.read(byte[])

read

public int read(byte[] b,
                int off,
                int len)
         throws IOException
Overrides:
read in class InputStream
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
Throws:
IOException
See Also:
InputStream.skip(long)


Copyright © 2000-2008 The Apache Software Foundation. All Rights Reserved.