Class BomInput

java.lang.Object
java.io.InputStream
com.univocity.parsers.common.input.BomInput
All Implemented Interfaces:
Closeable, AutoCloseable

public final class BomInput extends 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.
  • Field Details

    • 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 String encoding
    • consumed

      private int consumed
    • input

      private final InputStream input
    • exception

      private IOException exception
  • Constructor Details

    • BomInput

      public BomInput(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 Details

    • setEncoding

      private void setEncoding(String encoding)
    • next

      private int next() throws IOException
      Throws:
      IOException
    • read

      public final int read() throws IOException
      Specified by:
      read in class InputStream
      Throws:
      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 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 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 IOException
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Overrides:
      close in class InputStream
      Throws:
      IOException