Class CsvParserBootstrapper


  • public final class CsvParserBootstrapper
    extends java.lang.Object
    This class is used to determine the encoding of byte stream that is to contain CSV document. Since there is no real specification for how this should work with CSV, it will be based on rules used with JSON (which themselves are similar to those used with XML); main points are to check for BOM first, then look for multi-byted fixed-length encodings (UTF-16, UTF-32). And finally, if neither found, must decide between most likely alternatives, UTF-8 and Latin-1.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected boolean _bigEndian  
      protected int _bytesPerChar  
      protected com.fasterxml.jackson.core.ObjectCodec _codec  
      protected com.fasterxml.jackson.core.io.IOContext _context  
      protected java.io.InputStream _in  
      protected byte[] _inputBuffer  
      private int _inputEnd  
      protected int _inputProcessed
      Current number of input units (bytes or chars) that were processed in previous blocks, before contents of current input buffer.
      private int _inputPtr  
      (package private) static byte UTF8_BOM_1  
      (package private) static byte UTF8_BOM_2  
      (package private) static byte UTF8_BOM_3  
    • Constructor Summary

      Constructors 
      Constructor Description
      CsvParserBootstrapper​(com.fasterxml.jackson.core.io.IOContext ctxt, com.fasterxml.jackson.core.ObjectCodec codec, byte[] inputBuffer, int inputStart, int inputLen)  
      CsvParserBootstrapper​(com.fasterxml.jackson.core.io.IOContext ctxt, com.fasterxml.jackson.core.ObjectCodec codec, java.io.InputStream in)  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private java.io.Reader _createReader​(com.fasterxml.jackson.core.JsonEncoding enc)  
      private boolean checkUTF16​(int i16)  
      private boolean checkUTF32​(int quad)  
      CsvParser constructParser​(int baseFeatures, int csvFeatures)  
      protected boolean ensureLoaded​(int minimum)  
      private boolean handleBOM​(int quad)  
      static com.fasterxml.jackson.core.format.MatchStrength hasCSVFormat​(com.fasterxml.jackson.core.format.InputAccessor acc, int quoteChar, char separatorChar)
      Current implementation is not as thorough as one used by other data formats like JSON.
      private void reportWeirdUCS4​(java.lang.String type)  
      private static int skipSpace​(com.fasterxml.jackson.core.format.InputAccessor acc, byte b)  
      • Methods inherited from class java.lang.Object

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

      • _context

        protected final com.fasterxml.jackson.core.io.IOContext _context
      • _codec

        protected final com.fasterxml.jackson.core.ObjectCodec _codec
      • _in

        protected final java.io.InputStream _in
      • _inputBuffer

        protected final byte[] _inputBuffer
      • _inputPtr

        private int _inputPtr
      • _inputEnd

        private int _inputEnd
      • _inputProcessed

        protected int _inputProcessed
        Current number of input units (bytes or chars) that were processed in previous blocks, before contents of current input buffer.

        Note: includes possible BOMs, if those were part of the input.

      • _bigEndian

        protected boolean _bigEndian
      • _bytesPerChar

        protected int _bytesPerChar
    • Constructor Detail

      • CsvParserBootstrapper

        public CsvParserBootstrapper​(com.fasterxml.jackson.core.io.IOContext ctxt,
                                     com.fasterxml.jackson.core.ObjectCodec codec,
                                     java.io.InputStream in)
      • CsvParserBootstrapper

        public CsvParserBootstrapper​(com.fasterxml.jackson.core.io.IOContext ctxt,
                                     com.fasterxml.jackson.core.ObjectCodec codec,
                                     byte[] inputBuffer,
                                     int inputStart,
                                     int inputLen)
    • Method Detail

      • constructParser

        public CsvParser constructParser​(int baseFeatures,
                                         int csvFeatures)
                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • _createReader

        private java.io.Reader _createReader​(com.fasterxml.jackson.core.JsonEncoding enc)
                                      throws java.io.IOException
        Throws:
        java.io.IOException
      • hasCSVFormat

        public static com.fasterxml.jackson.core.format.MatchStrength hasCSVFormat​(com.fasterxml.jackson.core.format.InputAccessor acc,
                                                                                   int quoteChar,
                                                                                   char separatorChar)
                                                                            throws java.io.IOException
        Current implementation is not as thorough as one used by other data formats like JSON. But it should work, for now, and can be improved as necessary.
        Throws:
        java.io.IOException
      • skipSpace

        private static final int skipSpace​(com.fasterxml.jackson.core.format.InputAccessor acc,
                                           byte b)
                                    throws java.io.IOException
        Throws:
        java.io.IOException
      • handleBOM

        private boolean handleBOM​(int quad)
                           throws java.io.IOException
        Returns:
        True if a BOM was succesfully found, and encoding thereby recognized.
        Throws:
        java.io.IOException
      • checkUTF32

        private boolean checkUTF32​(int quad)
                            throws java.io.IOException
        Throws:
        java.io.IOException
      • checkUTF16

        private boolean checkUTF16​(int i16)
      • reportWeirdUCS4

        private void reportWeirdUCS4​(java.lang.String type)
                              throws java.io.IOException
        Throws:
        java.io.IOException
      • ensureLoaded

        protected boolean ensureLoaded​(int minimum)
                                throws java.io.IOException
        Throws:
        java.io.IOException