Class CsvDecoder

java.lang.Object
com.fasterxml.jackson.dataformat.csv.impl.CsvDecoder

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

    • INT_SPACE

      private static final int INT_SPACE
      See Also:
    • INT_CR

      private static final int INT_CR
      See Also:
    • INT_LF

      private static final int INT_LF
      See Also:
    • _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 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.
    • _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)
    • NR_UNKNOWN

      protected static final int NR_UNKNOWN
      See Also:
    • NR_INT

      protected static final int NR_INT
      See Also:
    • NR_LONG

      protected static final int NR_LONG
      See Also:
    • NR_BIGINT

      protected static final int NR_BIGINT
      See Also:
    • NR_DOUBLE

      protected static final int NR_DOUBLE
      See Also:
    • NR_BIGDECIMAL

      protected static final int NR_BIGDECIMAL
      See Also:
    • BD_MIN_LONG

      static final BigDecimal BD_MIN_LONG
    • BD_MAX_LONG

      static final BigDecimal BD_MAX_LONG
    • BD_MIN_INT

      static final BigDecimal BD_MIN_INT
    • BD_MAX_INT

      static final BigDecimal BD_MAX_INT
    • MIN_INT_L

      static final long MIN_INT_L
      See Also:
    • MAX_INT_L

      static final long MAX_INT_L
      See Also:
    • MIN_LONG_D

      static final double MIN_LONG_D
      See Also:
    • MAX_LONG_D

      static final double MAX_LONG_D
      See Also:
    • MIN_INT_D

      static final double MIN_INT_D
      See Also:
    • MAX_INT_D

      static final double MAX_INT_D
      See Also:
    • INT_0

      protected static final int INT_0
      See Also:
    • INT_1

      protected static final int INT_1
      See Also:
    • INT_2

      protected static final int INT_2
      See Also:
    • INT_3

      protected static final int INT_3
      See Also:
    • INT_4

      protected static final int INT_4
      See Also:
    • INT_5

      protected static final int INT_5
      See Also:
    • INT_6

      protected static final int INT_6
      See Also:
    • INT_7

      protected static final int INT_7
      See Also:
    • INT_8

      protected static final int INT_8
      See Also:
    • INT_9

      protected static final int INT_9
      See Also:
    • INT_MINUS

      protected static final int INT_MINUS
      See Also:
    • INT_PLUS

      protected static final int INT_PLUS
      See Also:
    • INT_DECIMAL_POINT

      protected static final int INT_DECIMAL_POINT
      See Also:
    • INT_e

      protected static final int INT_e
      See Also:
    • INT_E

      protected static final int INT_E
      See Also:
    • CHAR_NULL

      protected static final char CHAR_NULL
      See Also:
    • _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 BigInteger _numberBigInt
    • _numberBigDecimal

      protected BigDecimal _numberBigDecimal
    • _numberString

      protected 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 Details

    • CsvDecoder

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

    • setSchema

      public void setSchema(CsvSchema schema)
    • overrideFormatFeatures

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

      public Object getInputSource()
    • isClosed

      public boolean isClosed()
    • close

      public void close() throws IOException
      Throws:
      IOException
    • releaseBuffered

      public int releaseBuffered(Writer out) throws IOException
      Throws:
      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()
    • getTokenCharacterOffset

      protected final long getTokenCharacterOffset()
    • getTokenLineNr

      protected final int getTokenLineNr()
    • getTokenColumnNr

      protected final int getTokenColumnNr()
    • releaseBuffers

      protected void releaseBuffers() throws IOException
      Throws:
      IOException
    • _closeInput

      protected void _closeInput() throws IOException
      Throws:
      IOException
    • loadMore

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

      public String getText() throws IOException
      Throws:
      IOException
    • hasMoreInput

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

      public boolean startNewLine() throws 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:
      IOException
    • skipLinesWhenNeeded

      public boolean skipLinesWhenNeeded() throws 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:
      IOException
      Since:
      2.10.1
    • _skipCommentLines

      public boolean _skipCommentLines() throws IOException
      Throws:
      IOException
    • _skipCommentContents

      private void _skipCommentContents() throws IOException
      Throws:
      IOException
    • skipLine

      public boolean skipLine() throws 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:
      IOException
    • nextString

      public String nextString() throws 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:
      IOException
    • nextStringOrLiteral

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

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

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

      protected String _nextUnquotedString(char[] outBuf, int outPtr) throws IOException
      Throws:
      IOException
    • _nextQuotedString

      protected String _nextQuotedString() throws IOException
      Throws:
      IOException
    • _handleLF

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

      protected char _unescape() throws IOException
      Throws:
      IOException
    • _nextChar

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

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

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

      public Number getNumberValue(boolean exact) throws 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:
      IOException
    • getNumberType

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

      public int getIntValue() throws IOException
      Throws:
      IOException
    • getLongValue

      public long getLongValue() throws IOException
      Throws:
      IOException
    • getBigIntegerValue

      public BigInteger getBigIntegerValue() throws IOException
      Throws:
      IOException
    • getFloatValue

      public float getFloatValue() throws IOException
      Throws:
      IOException
    • getDoubleValue

      public double getDoubleValue() throws IOException
      Throws:
      IOException
    • getDecimalValue

      public BigDecimal getDecimalValue() throws IOException
      Throws:
      IOException
    • _getBigInteger

      protected BigInteger _getBigInteger() throws 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:
      IOException
      Since:
      2.14
    • _getBigDecimal

      protected BigDecimal _getBigDecimal() throws 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:
      IOException
      Since:
      2.14
    • _parseNumericValue

      protected void _parseNumericValue(boolean exactNumber) throws 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:
      IOException
    • looksLikeInt

      private boolean looksLikeInt() throws IOException
      Throws:
      IOException
    • _parseIntValue

      protected void _parseIntValue() throws IOException
      Throws:
      IOException
    • _parseSlowFloatValue

      private final void _parseSlowFloatValue(boolean exactNumber) throws IOException
      Throws:
      IOException
    • _parseSlowIntValue

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

      protected void convertNumberToInt() throws IOException
      Throws:
      IOException
    • convertNumberToLong

      protected void convertNumberToLong() throws IOException
      Throws:
      IOException
    • convertNumberToBigInteger

      protected void convertNumberToBigInteger() throws IOException
      Throws:
      IOException
    • convertNumberToDouble

      protected void convertNumberToDouble() throws IOException
      Throws:
      IOException
    • convertNumberToBigDecimal

      protected void convertNumberToBigDecimal() throws IOException
      Throws:
      IOException
    • reportUnexpectedNumberChar

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

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

      protected void reportOverflowInt() throws IOException
      Throws:
      IOException
    • reportOverflowLong

      protected void reportOverflowLong() throws IOException
      Throws:
      IOException
    • constructError

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

      protected static final String _getCharDesc(int ch)
    • _throwInternal

      private void _throwInternal()
    • _reportError

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