Class CsvDecoder


  • public class CsvDecoder
    extends java.lang.Object
    Low-level helper class that handles actual reading of CSV, purely based on indexes given without worrying about reordering etc.
    • Field Detail

      • _owner

        protected final CsvParser _owner
        Unfortunate back reference, needed for error reporting
      • _ioContext

        protected final com.fasterxml.jackson.core.io.IOContext _ioContext
        I/O context for this reader. It handles buffer allocation for the reader.
      • _inputReader

        protected java.io.Reader _inputReader
        Input stream that can be used for reading more content, if one in use. May be null, if input comes just as a full buffer, or if the stream has been closed.

        NOTE: renamed in 2.13 from _inputSource.

      • _bufferRecyclable

        protected boolean _bufferRecyclable
        Flag that indicates whether the input buffer is recycable (and needs to be returned to recycler once we are done) or not.

        If it is not, it also means that parser can NOT modify underlying buffer.

      • _autoCloseInput

        protected boolean _autoCloseInput
      • _trimSpaces

        protected boolean _trimSpaces
        Configuration flag that determines whether spaces surrounding separator characters are to be automatically trimmed or not.
      • _allowComments

        protected boolean _allowComments
      • _skipBlankLines

        protected boolean _skipBlankLines
        Since:
        2.10.1
      • _maxSpecialChar

        protected int _maxSpecialChar
        Maximum of quote character, linefeeds (\r and \n), escape character.
      • _separatorChar

        protected int _separatorChar
      • _quoteChar

        protected int _quoteChar
      • _escapeChar

        protected int _escapeChar
      • _textBuffer

        protected final com.fasterxml.jackson.core.util.TextBuffer _textBuffer
        Buffer that contains contents of all values after processing of doubled-quotes, escaped characters.
      • _inputBuffer

        protected char[] _inputBuffer
        Current buffer from which data is read; generally data is read into buffer from input source, but in some cases pre-loaded buffer is handed to the parser.
      • _inputPtr

        protected int _inputPtr
        Pointer to next available character in buffer
      • _inputEnd

        protected int _inputEnd
        Index of character after last available one in the buffer.
      • _pendingLF

        protected int _pendingLF
        Marker to indicate that a linefeed was encountered and now needs to be handled (indicates end-of-record).
      • _closed

        protected boolean _closed
        Flag that indicates whether parser is closed or not. Gets set when parser is either closed by explicit call (close()) or when end-of-input is reached.
      • _currInputProcessed

        protected long _currInputProcessed
        Number of characters/bytes that were contained in previous blocks (blocks that were already processed prior to the current buffer).
      • _currInputRow

        protected int _currInputRow
        Current row location of current point in input buffer, starting from 1, if available.
      • _currInputRowStart

        protected int _currInputRowStart
        Current index of the first character of the current row in input buffer. Needed to calculate column position, if necessary; benefit of not having column itself is that this only has to be updated once per line.
      • _currInputQuoted

        protected boolean _currInputQuoted
        Flag that indicates whether the current token has been quoted or not.
        Since:
        2.18
      • _tokenInputTotal

        protected long _tokenInputTotal
        Total number of bytes/characters read before start of current token. For big (gigabyte-sized) sizes are possible, needs to be long, unlike pointers and sizes related to in-memory buffers.
      • _tokenInputRow

        protected int _tokenInputRow
        Input row on which current token starts, 1-based
      • _tokenInputCol

        protected int _tokenInputCol
        Column on input row that current token starts; 0-based (although in the end it'll be converted to 1-based)
      • BI_MIN_INT

        static final java.math.BigInteger BI_MIN_INT
      • BI_MAX_INT

        static final java.math.BigInteger BI_MAX_INT
      • BI_MIN_LONG

        static final java.math.BigInteger BI_MIN_LONG
      • BI_MAX_LONG

        static final java.math.BigInteger BI_MAX_LONG
      • BD_MIN_LONG

        static final java.math.BigDecimal BD_MIN_LONG
      • BD_MAX_LONG

        static final java.math.BigDecimal BD_MAX_LONG
      • BD_MIN_INT

        static final java.math.BigDecimal BD_MIN_INT
      • BD_MAX_INT

        static final java.math.BigDecimal BD_MAX_INT
      • _numTypesValid

        protected int _numTypesValid
        Bitfield that indicates which numeric representations have been calculated for the current type
      • _numberInt

        protected int _numberInt
      • _numberLong

        protected long _numberLong
      • _numberDouble

        protected double _numberDouble
      • _numberBigInt

        protected java.math.BigInteger _numberBigInt
      • _numberBigDecimal

        protected java.math.BigDecimal _numberBigDecimal
      • _numberString

        protected java.lang.String _numberString
        Textual number representation captured from input in cases lazy-parsing is desired.

        As of 2.14, this only applies to BigInteger and BigDecimal.

        Since:
        2.14
    • Constructor Detail

      • CsvDecoder

        public CsvDecoder​(CsvParser owner,
                          com.fasterxml.jackson.core.io.IOContext ctxt,
                          java.io.Reader r,
                          CsvSchema schema,
                          com.fasterxml.jackson.core.util.TextBuffer textBuffer,
                          int stdFeatures,
                          int csvFeatures)
    • Method Detail

      • setSchema

        public void setSchema​(CsvSchema schema)
      • overrideFormatFeatures

        public void overrideFormatFeatures​(int csvFeatures)
        Since:
        2.7
      • getInputSource

        public java.lang.Object getInputSource()
      • isClosed

        public boolean isClosed()
      • close

        public void close()
                   throws java.io.IOException
        Throws:
        java.io.IOException
      • releaseBuffered

        public int releaseBuffered​(java.io.Writer out)
                            throws java.io.IOException
        Throws:
        java.io.IOException
      • childArrayContext

        public com.fasterxml.jackson.core.json.JsonReadContext childArrayContext​(com.fasterxml.jackson.core.json.JsonReadContext context)
      • childObjectContext

        public com.fasterxml.jackson.core.json.JsonReadContext childObjectContext​(com.fasterxml.jackson.core.json.JsonReadContext context)
      • getTokenLocation

        public com.fasterxml.jackson.core.JsonLocation getTokenLocation()
      • getCurrentLocation

        public com.fasterxml.jackson.core.JsonLocation getCurrentLocation()
      • getCurrentRow

        public final int getCurrentRow()
      • getCurrentColumn

        public final int getCurrentColumn()
      • isCurrentTokenQuoted

        public final boolean isCurrentTokenQuoted()
        Tell if the current token has been quoted or not.
        Returns:
        True if the current token has been quoted, false otherwise
        Since:
        2.18
      • getTokenCharacterOffset

        protected final long getTokenCharacterOffset()
      • getTokenLineNr

        protected final int getTokenLineNr()
      • getTokenColumnNr

        protected final int getTokenColumnNr()
      • releaseBuffers

        protected void releaseBuffers()
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • _closeInput

        protected void _closeInput()
                            throws java.io.IOException
        Throws:
        java.io.IOException
      • loadMore

        protected final boolean loadMore()
                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • getText

        public java.lang.String getText()
                                 throws java.io.IOException
        Throws:
        java.io.IOException
      • hasMoreInput

        public boolean hasMoreInput()
                             throws java.io.IOException
        Method that can be called to see if there is at least one more character to be parsed.
        Throws:
        java.io.IOException
      • startNewLine

        public boolean startNewLine()
                             throws java.io.IOException
        Method called to handle details of starting a new line, which may include skipping a linefeed.
        Returns:
        True if there is a new data line to handle; false if not
        Throws:
        java.io.IOException
      • skipLinesWhenNeeded

        public boolean skipLinesWhenNeeded()
                                    throws java.io.IOException
        Optionally skip lines that are empty or are comments, depending on the feature activated in the parser
        Returns:
        false if the end of input was reached
        Throws:
        java.io.IOException
        Since:
        2.10.1
      • _skipCommentLines

        public boolean _skipCommentLines()
                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • _skipCommentContents

        private void _skipCommentContents()
                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • skipLine

        public boolean skipLine()
                         throws java.io.IOException
        Method called to blindly skip a single line of content, without considering aspects like quoting or escaping. Used currently simply to skip the first line of input document, if instructed to do so.
        Throws:
        java.io.IOException
      • nextString

        public java.lang.String nextString()
                                    throws java.io.IOException
        Method called to parse the next token when we don't have any type information, so that all tokens are exposed as basic String values.
        Returns:
        Column value if more found; null to indicate end of line of input
        Throws:
        java.io.IOException
      • nextStringOrLiteral

        public com.fasterxml.jackson.core.JsonToken nextStringOrLiteral()
                                                                 throws java.io.IOException
        Throws:
        java.io.IOException
      • nextNumber

        public com.fasterxml.jackson.core.JsonToken nextNumber()
                                                        throws java.io.IOException
        Throws:
        java.io.IOException
      • nextNumberOrString

        public com.fasterxml.jackson.core.JsonToken nextNumberOrString()
                                                                throws java.io.IOException
        Throws:
        java.io.IOException
      • _nextUnquotedString

        protected java.lang.String _nextUnquotedString​(char[] outBuf,
                                                       int outPtr)
                                                throws java.io.IOException
        Throws:
        java.io.IOException
      • _nextQuotedString

        protected java.lang.String _nextQuotedString()
                                              throws java.io.IOException
        Throws:
        java.io.IOException
      • _handleLF

        protected final void _handleLF()
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • _unescape

        protected char _unescape()
                          throws java.io.IOException
        Throws:
        java.io.IOException
      • _nextChar

        protected final int _nextChar()
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • _skipLeadingSpace

        protected final int _skipLeadingSpace()
                                       throws java.io.IOException
        Throws:
        java.io.IOException
      • isExpectedNumberIntToken

        public boolean isExpectedNumberIntToken()
                                         throws java.io.IOException
        Method used by CsvParser.isExpectedNumberIntToken() to coerce current token into integer number, if it looks like one.
        Throws:
        java.io.IOException
        Since:
        2.12
      • getNumberValue

        public java.lang.Number getNumberValue​(boolean exact)
                                        throws java.io.IOException
        Parameters:
        exact - Whether we should try to retain maximum precision or not; passed as true by getNumberValueExact(), and as false by regular getNumberValue).
        Throws:
        java.io.IOException
      • getNumberType

        public com.fasterxml.jackson.core.JsonParser.NumberType getNumberType()
                                                                       throws java.io.IOException
        Throws:
        java.io.IOException
      • getIntValue

        public int getIntValue()
                        throws java.io.IOException
        Throws:
        java.io.IOException
      • getLongValue

        public long getLongValue()
                          throws java.io.IOException
        Throws:
        java.io.IOException
      • getBigIntegerValue

        public java.math.BigInteger getBigIntegerValue()
                                                throws java.io.IOException
        Throws:
        java.io.IOException
      • getFloatValue

        public float getFloatValue()
                            throws java.io.IOException
        Throws:
        java.io.IOException
      • getDoubleValue

        public double getDoubleValue()
                              throws java.io.IOException
        Throws:
        java.io.IOException
      • getDecimalValue

        public java.math.BigDecimal getDecimalValue()
                                             throws java.io.IOException
        Throws:
        java.io.IOException
      • _getBigInteger

        protected java.math.BigInteger _getBigInteger()
                                               throws java.io.IOException
        Internal accessor that needs to be used for accessing number value of type BigInteger which -- as of 2.14 -- is typically lazily parsed.
        Throws:
        java.io.IOException
        Since:
        2.14
      • _getBigDecimal

        protected java.math.BigDecimal _getBigDecimal()
                                               throws java.io.IOException
        Internal accessor that needs to be used for accessing number value of type BigDecimal which -- as of 2.14 -- is typically lazily parsed.
        Throws:
        java.io.IOException
        Since:
        2.14
      • _parseNumericValue

        protected void _parseNumericValue​(boolean exactNumber)
                                   throws java.io.IOException
        Method that will parse actual numeric value out of a syntactically valid number value. Type it will parse into depends on whether it is a floating point number, as well as its magnitude: smallest legal type (of ones available) is used for efficiency.
        Parameters:
        exactNumber - Whether to try to retain the highest precision for floating-point values or not
        Throws:
        java.io.IOException
      • looksLikeInt

        private boolean looksLikeInt()
                              throws java.io.IOException
        Throws:
        java.io.IOException
      • _parseIntValue

        protected void _parseIntValue()
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • _parseSlowFloatValue

        private final void _parseSlowFloatValue​(boolean exactNumber)
                                         throws java.io.IOException
        Throws:
        java.io.IOException
      • _parseSlowIntValue

        private final void _parseSlowIntValue​(char[] buf,
                                              int offset,
                                              int len,
                                              boolean neg)
                                       throws java.io.IOException
        Throws:
        java.io.IOException
      • convertNumberToInt

        protected void convertNumberToInt()
                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • convertNumberToLong

        protected void convertNumberToLong()
                                    throws java.io.IOException
        Throws:
        java.io.IOException
      • convertNumberToBigInteger

        protected void convertNumberToBigInteger()
                                          throws java.io.IOException
        Throws:
        java.io.IOException
      • convertNumberToDouble

        protected void convertNumberToDouble()
                                      throws java.io.IOException
        Throws:
        java.io.IOException
      • convertNumberToBigDecimal

        protected void convertNumberToBigDecimal()
                                          throws java.io.IOException
        Throws:
        java.io.IOException
      • reportUnexpectedNumberChar

        protected void reportUnexpectedNumberChar​(int ch,
                                                  java.lang.String comment)
                                           throws com.fasterxml.jackson.core.JsonParseException
        Throws:
        com.fasterxml.jackson.core.JsonParseException
      • reportInvalidNumber

        protected void reportInvalidNumber​(java.lang.String msg)
                                    throws com.fasterxml.jackson.core.JsonParseException
        Throws:
        com.fasterxml.jackson.core.JsonParseException
      • reportOverflowInt

        protected void reportOverflowInt()
                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • reportOverflowLong

        protected void reportOverflowLong()
                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • constructError

        protected final com.fasterxml.jackson.core.JsonParseException constructError​(java.lang.String msg,
                                                                                     java.lang.Throwable t)
      • _getCharDesc

        protected static final java.lang.String _getCharDesc​(int ch)
      • _throwInternal

        private void _throwInternal()
      • _reportError

        protected final void _reportError​(java.lang.String msg)
                                   throws com.fasterxml.jackson.core.JsonParseException
        Method for reporting low-level decoding (parsing) problems
        Throws:
        com.fasterxml.jackson.core.JsonParseException