Class CsvDecoder
java.lang.Object
com.fasterxml.jackson.dataformat.csv.impl.CsvDecoder
Low-level helper class that handles actual reading of CSV,
purely based on indexes given without worrying about reordering etc.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected boolean
protected boolean
protected boolean
Flag that indicates whether the input buffer is recycable (and needs to be returned to recycler once we are done) or not.protected boolean
Flag that indicates whether parser is closed or not.protected long
Number of characters/bytes that were contained in previous blocks (blocks that were already processed prior to the current buffer).protected int
Current row location of current point in input buffer, starting from 1, if available.protected int
Current index of the first character of the current row in input buffer.protected int
protected char[]
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.protected int
Index of character after last available one in the buffer.protected int
Pointer to next available character in bufferprotected Reader
Input stream that can be used for reading more content, if one in use.protected final com.fasterxml.jackson.core.io.IOContext
I/O context for this reader.protected int
Maximum of quote character, linefeeds (\r and \n), escape character.protected BigDecimal
protected BigInteger
protected double
protected int
protected long
protected int
Bitfield that indicates which numeric representations have been calculated for the current typeprotected final CsvParser
Unfortunate back reference, needed for error reportingprotected int
Marker to indicate that a linefeed was encountered and now needs to be handled (indicates end-of-record).protected int
protected int
protected final TextBuffer
Buffer that contains contents of all values after processing of doubled-quotes, escaped characters.protected int
Column on input row that current token starts; 0-based (although in the end it'll be converted to 1-based)protected int
Input row on which current token starts, 1-basedprotected long
Total number of bytes/characters read before start of current token.protected boolean
Configuration flag that determines whether spaces surrounding separator characters are to be automatically trimmed or not.(package private) static final BigDecimal
(package private) static final BigDecimal
(package private) static final BigDecimal
(package private) static final BigDecimal
protected static final char
protected static final int
protected static final int
protected static final int
protected static final int
protected static final int
protected static final int
protected static final int
protected static final int
protected static final int
protected static final int
private static final int
protected static final int
protected static final int
protected static final int
private static final int
private static final int
protected static final int
protected static final int
private static final int
(package private) static final double
(package private) static final long
(package private) static final double
(package private) static final double
(package private) static final long
(package private) static final double
protected static final int
protected static final int
protected static final int
protected static final int
protected static final int
protected static final int
-
Constructor Summary
ConstructorsConstructorDescriptionCsvDecoder
(CsvParser owner, com.fasterxml.jackson.core.io.IOContext ctxt, Reader r, CsvSchema schema, TextBuffer textBuffer, int stdFeatures, int csvFeatures) -
Method Summary
Modifier and TypeMethodDescriptionprotected void
protected static final String
_getCharDesc
(int ch) protected final void
protected final int
protected String
protected String
_nextUnquotedString
(char[] outBuf, int outPtr) protected void
_parseNumericValue
(int expType) Method that will parse actual numeric value out of a syntactically valid number value.private final void
_parseSlowFloatValue
(int expType) private final void
_parseSlowIntValue
(int expType, char[] buf, int offset, int len, boolean neg) protected final void
_reportError
(String msg) Method for reporting low-level decoding (parsing) problemsprotected int
protected final int
private void
protected char
com.fasterxml.jackson.core.json.JsonReadContext
childArrayContext
(com.fasterxml.jackson.core.json.JsonReadContext context) com.fasterxml.jackson.core.json.JsonReadContext
childObjectContext
(com.fasterxml.jackson.core.json.JsonReadContext context) void
close()
protected final com.fasterxml.jackson.core.JsonParseException
constructError
(String msg, Throwable t) protected void
protected void
protected void
protected void
protected void
final int
com.fasterxml.jackson.core.JsonLocation
final int
double
float
int
long
com.fasterxml.jackson.core.JsonParser.NumberType
getText()
protected final long
protected final int
protected final int
com.fasterxml.jackson.core.JsonLocation
boolean
Method that can be called to see if there is at least one more character to be parsed.boolean
isClosed()
protected final boolean
loadMore()
com.fasterxml.jackson.core.JsonToken
com.fasterxml.jackson.core.JsonToken
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.com.fasterxml.jackson.core.JsonToken
void
overrideFormatFeatures
(int csvFeatures) int
releaseBuffered
(Writer out) protected void
protected void
protected void
protected void
protected void
reportUnexpectedNumberChar
(int ch, String comment) void
void
boolean
skipLine()
Method called to blindly skip a single line of content, without considering aspects like quoting or escaping.boolean
Method called to handle details of starting a new line, which may include skipping a linefeed.
-
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:
-
INT_HASH
private static final int INT_HASH- See Also:
-
_owner
Unfortunate back reference, needed for error reporting -
_ioContext
protected final com.fasterxml.jackson.core.io.IOContext _ioContextI/O context for this reader. It handles buffer allocation for the reader. -
_inputSource
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. -
_bufferRecyclable
protected boolean _bufferRecyclableFlag 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 _trimSpacesConfiguration flag that determines whether spaces surrounding separator characters are to be automatically trimmed or not. -
_allowComments
protected boolean _allowComments -
_maxSpecialChar
protected int _maxSpecialCharMaximum of quote character, linefeeds (\r and \n), escape character. -
_separatorChar
protected int _separatorChar -
_quoteChar
protected int _quoteChar -
_escapeChar
protected int _escapeChar -
_textBuffer
Buffer that contains contents of all values after processing of doubled-quotes, escaped characters. -
_inputBuffer
protected char[] _inputBufferCurrent 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 _inputPtrPointer to next available character in buffer -
_inputEnd
protected int _inputEndIndex of character after last available one in the buffer. -
_pendingLF
protected int _pendingLFMarker to indicate that a linefeed was encountered and now needs to be handled (indicates end-of-record). -
_closed
protected boolean _closedFlag 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 _currInputProcessedNumber of characters/bytes that were contained in previous blocks (blocks that were already processed prior to the current buffer). -
_currInputRow
protected int _currInputRowCurrent row location of current point in input buffer, starting from 1, if available. -
_currInputRowStart
protected int _currInputRowStartCurrent 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 _tokenInputTotalTotal 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 _tokenInputRowInput row on which current token starts, 1-based -
_tokenInputCol
protected int _tokenInputColColumn 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
-
BD_MAX_LONG
-
BD_MIN_INT
-
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 _numTypesValidBitfield 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
-
_numberBigDecimal
-
-
Constructor Details
-
CsvDecoder
public CsvDecoder(CsvParser owner, com.fasterxml.jackson.core.io.IOContext ctxt, Reader r, CsvSchema schema, TextBuffer textBuffer, int stdFeatures, int csvFeatures)
-
-
Method Details
-
setSchema
-
overrideFormatFeatures
public void overrideFormatFeatures(int csvFeatures) - Since:
- 2.7
-
getInputSource
-
isClosed
public boolean isClosed() -
close
- Throws:
IOException
-
releaseBuffered
- 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
- Throws:
IOException
-
_closeInput
- Throws:
IOException
-
loadMore
- Throws:
IOException
-
getText
-
hasMoreInput
Method that can be called to see if there is at least one more character to be parsed.- Throws:
IOException
-
startNewLine
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
-
skipLeadingComments
- Throws:
IOException
-
_skipCommentLines
- Throws:
IOException
-
skipLine
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
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
- Throws:
IOException
-
nextNumber
- Throws:
IOException
-
nextNumberOrString
- Throws:
IOException
-
_nextUnquotedString
- Throws:
IOException
-
_nextQuotedString
- Throws:
IOException
-
_handleLF
- Throws:
IOException
-
_unescape
- Throws:
IOException
-
_nextChar
- Throws:
IOException
-
_skipLeadingSpace
- Throws:
IOException
-
getNumberValue
- Throws:
IOException
-
getNumberType
- Throws:
IOException
-
getIntValue
- Throws:
IOException
-
getLongValue
- Throws:
IOException
-
getBigIntegerValue
- Throws:
IOException
-
getFloatValue
- Throws:
IOException
-
getDoubleValue
- Throws:
IOException
-
getDecimalValue
- Throws:
IOException
-
_parseNumericValue
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:
expType
- Numeric type that we will immediately need, if any; mostly necessary to optimize handling of floating point numbers- Throws:
IOException
-
_parseSlowFloatValue
- Throws:
IOException
-
_parseSlowIntValue
private final void _parseSlowIntValue(int expType, char[] buf, int offset, int len, boolean neg) throws IOException - Throws:
IOException
-
convertNumberToInt
- Throws:
IOException
-
convertNumberToLong
- Throws:
IOException
-
convertNumberToBigInteger
- Throws:
IOException
-
convertNumberToDouble
- Throws:
IOException
-
convertNumberToBigDecimal
- Throws:
IOException
-
reportUnexpectedNumberChar
protected void reportUnexpectedNumberChar(int ch, String comment) throws com.fasterxml.jackson.core.JsonParseException - Throws:
com.fasterxml.jackson.core.JsonParseException
-
reportInvalidNumber
- Throws:
com.fasterxml.jackson.core.JsonParseException
-
reportOverflowInt
- Throws:
IOException
-
reportOverflowLong
- Throws:
IOException
-
constructError
-
_getCharDesc
-
_throwInternal
private void _throwInternal() -
_reportError
Method for reporting low-level decoding (parsing) problems- Throws:
com.fasterxml.jackson.core.JsonParseException
-