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.
    Author:
    Univocity Software Pty Ltd - dev@univocity.com
    • 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.
      int read()  
      • 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
    • 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

      • 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