Class UnicodeInputStream

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable

    public class UnicodeInputStream
    extends java.io.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 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

      Constructors 
      Constructor Description
      UnicodeInputStream​(java.io.InputStream inputStream)
      Creates a new UnicodeInputStream object.
      UnicodeInputStream​(java.io.InputStream inputStream, boolean skipBOM)
      Creates a new UnicodeInputStream object.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      int available()  
      void close()  
      java.lang.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 java.lang.String readEncoding()
      This method gets the encoding from the stream contents if a BOM exists.
      void reset()  
      static boolean sameEncoding​(java.lang.String left, java.lang.String right)
      Helper function to compare encodings
      long skip​(long n)  
      • Methods inherited from class java.io.InputStream

        nullInputStream, readAllBytes, readNBytes, readNBytes, transferTo
      • 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
      • 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 Detail

      • UnicodeInputStream

        public UnicodeInputStream​(java.io.InputStream inputStream)
                           throws java.lang.IllegalStateException,
                                  java.io.IOException
        Creates a new UnicodeInputStream object. Skips a BOM which defines the file encoding.
        Parameters:
        inputStream - The input stream to use for reading.
        Throws:
        java.lang.IllegalStateException
        java.io.IOException
      • UnicodeInputStream

        public UnicodeInputStream​(java.io.InputStream inputStream,
                                  boolean skipBOM)
                           throws java.lang.IllegalStateException,
                                  java.io.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:
        java.lang.IllegalStateException
        java.io.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 java.lang.String getEncodingFromStream()
        Read encoding based on BOM.
        Returns:
        The encoding based on the BOM.
        Throws:
        java.lang.IllegalStateException - When a problem reading the BOM occured.
      • readEncoding

        protected java.lang.String readEncoding()
                                         throws java.io.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:
        java.io.IOException
      • close

        public void close()
                   throws java.io.IOException
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Overrides:
        close in class java.io.InputStream
        Throws:
        java.io.IOException
        See Also:
        InputStream.close()
      • available

        public int available()
                      throws java.io.IOException
        Overrides:
        available in class java.io.InputStream
        Throws:
        java.io.IOException
        See Also:
        InputStream.available()
      • mark

        public void mark​(int readlimit)
        Overrides:
        mark in class java.io.InputStream
        Parameters:
        readlimit -
        See Also:
        InputStream.mark(int)
      • markSupported

        public boolean markSupported()
        Overrides:
        markSupported in class java.io.InputStream
        Returns:
        mark supported
        See Also:
        InputStream.markSupported()
      • read

        public int read()
                 throws java.io.IOException
        Specified by:
        read in class java.io.InputStream
        Returns:
        read char
        Throws:
        java.io.IOException
        See Also:
        InputStream.read()
      • read

        public int read​(byte[] b)
                 throws java.io.IOException
        Overrides:
        read in class java.io.InputStream
        Parameters:
        b - buffer
        Returns:
        read chars count
        Throws:
        java.io.IOException
        See Also:
        InputStream.read(byte[])
      • read

        public int read​(byte[] b,
                        int off,
                        int len)
                 throws java.io.IOException
        Overrides:
        read in class java.io.InputStream
        Parameters:
        b - buffer
        off - offset
        len - length
        Returns:
        reac char
        Throws:
        java.io.IOException
        See Also:
        InputStream.read(byte[], int, int)
      • reset

        public void reset()
                   throws java.io.IOException
        Overrides:
        reset in class java.io.InputStream
        Throws:
        java.io.IOException
        See Also:
        InputStream.reset()
      • skip

        public long skip​(long n)
                  throws java.io.IOException
        Overrides:
        skip in class java.io.InputStream
        Parameters:
        n -
        Returns:
        skipped count
        Throws:
        java.io.IOException
        See Also:
        InputStream.skip(long)
      • sameEncoding

        public static boolean sameEncoding​(java.lang.String left,
                                           java.lang.String right)
        Helper function to compare encodings
        Parameters:
        left -
        right -
        Returns:
        true for same encoding