Class BomInput

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

    public final class BomInput
    extends java.io.InputStream
    A wrapper for an InputStream that attempts to detect a Byte Order Mark (BOM) in the input and derive the character encoding that should be used to decode the incoming content.
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      static class  BomInput.BytesProcessedNotification
      Internal notification exception used to re-wrap the original InputStream into a Reader.
    • Constructor Summary

      Constructors 
      Constructor Description
      BomInput​(java.io.InputStream input)
      Wraps an InputStream and reads the first bytes found on it to attempt to read a BOM.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void close()  
      java.nio.charset.Charset getCharset()
      Returns the detected Charset determined by the Byte Order Mark (BOM) available in the input provided in the constructor of this class.
      java.lang.String getEncoding()
      Returns the detected encoding name determined by the Byte Order Mark (BOM) available in the input provided in the constructor of this class.
      boolean hasBytesStored()
      Returns a flag indicating whether or not all bytes read from the wrapped input stream have been consumed.
      private int next()  
      int read()  
      private void setEncoding​(java.lang.String encoding)  
      • Methods inherited from class java.io.InputStream

        available, mark, markSupported, nullInputStream, read, read, readAllBytes, readNBytes, readNBytes, reset, skip, transferTo
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • UTF_8_BOM

        public static final byte[] UTF_8_BOM
      • UTF_16BE_BOM

        public static final byte[] UTF_16BE_BOM
      • UTF_16LE_BOM

        public static final byte[] UTF_16LE_BOM
      • UTF_32BE_BOM

        public static final byte[] UTF_32BE_BOM
      • UTF_32LE_BOM

        public static final byte[] UTF_32LE_BOM
      • bytesRead

        private int bytesRead
      • bytes

        private int[] bytes
      • encoding

        private java.lang.String encoding
      • consumed

        private int consumed
      • input

        private final java.io.InputStream input
      • exception

        private java.io.IOException exception
    • Constructor Detail

      • BomInput

        public BomInput​(java.io.InputStream input)
        Wraps an InputStream and reads the first bytes found on it to attempt to read a BOM.
        Parameters:
        input - the input whose first bytes should be analyzed.
    • Method Detail

      • setEncoding

        private void setEncoding​(java.lang.String encoding)
      • next

        private int next()
                  throws java.io.IOException
        Throws:
        java.io.IOException
      • read

        public final int read()
                       throws java.io.IOException
        Specified by:
        read in class java.io.InputStream
        Throws:
        java.io.IOException
      • hasBytesStored

        public final boolean hasBytesStored()
        Returns a flag indicating whether or not all bytes read from the wrapped input stream have been consumed. This allows client code to determine if the original input stream can be used directly and safely, or if this BomInput wrapper class should be used instead. If there are stored bytes that need to be consumed before the wrapped input stream is consumed again, this method will return true.
        Returns:
        false if there are no bytes stored and the original input stream can be used directly. If this wrapper needs to be used to return stored bytes before, then true will be returned.
      • getCharset

        public final java.nio.charset.Charset getCharset()
        Returns the detected Charset determined by the Byte Order Mark (BOM) available in the input provided in the constructor of this class. If no BOM was detected, this method will return null.
        Returns:
        the detected Charset or null if a BOM could not be matched.
      • getEncoding

        public final java.lang.String getEncoding()
        Returns the detected encoding name determined by the Byte Order Mark (BOM) available in the input provided in the constructor of this class. If no BOM was detected, this method will return null.
        Returns:
        the detected encoding name or null if a BOM could not be matched.
      • 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