Class CsvDecoder
- java.lang.Object
-
- com.fasterxml.jackson.dataformat.csv.impl.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 Summary
Fields Modifier and Type Field Description protected boolean
_allowComments
protected boolean
_autoCloseInput
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.protected boolean
_closed
Flag that indicates whether parser is closed or not.protected long
_currInputProcessed
Number of characters/bytes that were contained in previous blocks (blocks that were already processed prior to the current buffer).protected int
_currInputRow
Current row location of current point in input buffer, starting from 1, if available.protected int
_currInputRowStart
Current index of the first character of the current row in input buffer.protected int
_escapeChar
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.protected int
_inputEnd
Index of character after last available one in the buffer.protected int
_inputPtr
Pointer to next available character in bufferprotected java.io.Reader
_inputSource
Input stream that can be used for reading more content, if one in use.protected com.fasterxml.jackson.core.io.IOContext
_ioContext
I/O context for this reader.protected int
_maxSpecialChar
Maximum of quote character, linefeeds (\r and \n), escape character.protected java.math.BigDecimal
_numberBigDecimal
protected java.math.BigInteger
_numberBigInt
protected double
_numberDouble
protected int
_numberInt
protected long
_numberLong
protected int
_numTypesValid
Bitfield that indicates which numeric representations have been calculated for the current typeprotected CsvParser
_owner
Unfortunate back reference, needed for error reportingprotected int
_pendingLF
Marker to indicate that a linefeed was encountered and now needs to be handled (indicates end-of-record).protected int
_quoteChar
protected int
_separatorChar
protected TextBuffer
_textBuffer
Buffer that contains contents of all values after processing of doubled-quotes, escaped characters.protected int
_tokenInputCol
Column on input row that current token starts; 0-based (although in the end it'll be converted to 1-based)protected int
_tokenInputRow
Input row on which current token starts, 1-basedprotected long
_tokenInputTotal
Total number of bytes/characters read before start of current token.protected boolean
_trimSpaces
Configuration flag that determines whether spaces surrounding separator characters are to be automatically trimmed or not.(package private) static java.math.BigDecimal
BD_MAX_INT
(package private) static java.math.BigDecimal
BD_MAX_LONG
(package private) static java.math.BigDecimal
BD_MIN_INT
(package private) static java.math.BigDecimal
BD_MIN_LONG
protected static char
CHAR_NULL
protected static int
INT_0
protected static int
INT_1
protected static int
INT_2
protected static int
INT_3
protected static int
INT_4
protected static int
INT_5
protected static int
INT_6
protected static int
INT_7
protected static int
INT_8
protected static int
INT_9
private static int
INT_CR
protected static int
INT_DECIMAL_POINT
protected static int
INT_e
protected static int
INT_E
private static int
INT_HASH
private static int
INT_LF
protected static int
INT_MINUS
protected static int
INT_PLUS
private static int
INT_SPACE
(package private) static double
MAX_INT_D
(package private) static long
MAX_INT_L
(package private) static double
MAX_LONG_D
(package private) static double
MIN_INT_D
(package private) static long
MIN_INT_L
(package private) static double
MIN_LONG_D
protected static int
NR_BIGDECIMAL
protected static int
NR_BIGINT
protected static int
NR_DOUBLE
protected static int
NR_INT
protected static int
NR_LONG
protected static int
NR_UNKNOWN
-
Constructor Summary
Constructors Constructor Description CsvDecoder(CsvParser owner, com.fasterxml.jackson.core.io.IOContext ctxt, java.io.Reader r, CsvSchema schema, TextBuffer textBuffer, int stdFeatures, int csvFeatures)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
_closeInput()
protected static java.lang.String
_getCharDesc(int ch)
protected void
_handleLF()
protected int
_nextChar()
protected java.lang.String
_nextQuotedString()
protected java.lang.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 void
_parseSlowFloatValue(int expType)
private void
_parseSlowIntValue(int expType, char[] buf, int offset, int len, boolean neg)
protected void
_reportError(java.lang.String msg)
Method for reporting low-level decoding (parsing) problemsprotected int
_skipCommentLines()
protected int
_skipLeadingSpace()
private void
_throwInternal()
protected char
_unescape()
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 com.fasterxml.jackson.core.JsonParseException
constructError(java.lang.String msg, java.lang.Throwable t)
protected void
convertNumberToBigDecimal()
protected void
convertNumberToBigInteger()
protected void
convertNumberToDouble()
protected void
convertNumberToInt()
protected void
convertNumberToLong()
java.math.BigInteger
getBigIntegerValue()
int
getCurrentColumn()
com.fasterxml.jackson.core.JsonLocation
getCurrentLocation()
int
getCurrentRow()
java.math.BigDecimal
getDecimalValue()
double
getDoubleValue()
float
getFloatValue()
java.lang.Object
getInputSource()
int
getIntValue()
long
getLongValue()
com.fasterxml.jackson.core.JsonParser.NumberType
getNumberType()
java.lang.Number
getNumberValue()
java.lang.String
getText()
protected long
getTokenCharacterOffset()
protected int
getTokenColumnNr()
protected int
getTokenLineNr()
com.fasterxml.jackson.core.JsonLocation
getTokenLocation()
boolean
hasMoreInput()
Method that can be called to see if there is at least one more character to be parsed.boolean
isClosed()
protected boolean
loadMore()
com.fasterxml.jackson.core.JsonToken
nextNumber()
com.fasterxml.jackson.core.JsonToken
nextNumberOrString()
java.lang.String
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.com.fasterxml.jackson.core.JsonToken
nextStringOrLiteral()
void
overrideFormatFeatures(int csvFeatures)
int
releaseBuffered(java.io.Writer out)
protected void
releaseBuffers()
protected void
reportInvalidNumber(java.lang.String msg)
protected void
reportOverflowInt()
protected void
reportOverflowLong()
protected void
reportUnexpectedNumberChar(int ch, java.lang.String comment)
void
setSchema(CsvSchema schema)
void
skipLeadingComments()
boolean
skipLine()
Method called to blindly skip a single line of content, without considering aspects like quoting or escaping.boolean
startNewLine()
Method called to handle details of starting a new line, which may include skipping a linefeed.
-
-
-
Field Detail
-
INT_SPACE
private static final int INT_SPACE
- See Also:
- Constant Field Values
-
INT_CR
private static final int INT_CR
- See Also:
- Constant Field Values
-
INT_LF
private static final int INT_LF
- See Also:
- Constant Field Values
-
INT_HASH
private static final int INT_HASH
- See Also:
- Constant Field Values
-
_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.
-
_inputSource
protected java.io.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 _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
-
_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 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:
- Constant Field Values
-
NR_INT
protected static final int NR_INT
- See Also:
- Constant Field Values
-
NR_LONG
protected static final int NR_LONG
- See Also:
- Constant Field Values
-
NR_BIGINT
protected static final int NR_BIGINT
- See Also:
- Constant Field Values
-
NR_DOUBLE
protected static final int NR_DOUBLE
- See Also:
- Constant Field Values
-
NR_BIGDECIMAL
protected static final int NR_BIGDECIMAL
- See Also:
- Constant Field Values
-
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
-
MIN_INT_L
static final long MIN_INT_L
- See Also:
- Constant Field Values
-
MAX_INT_L
static final long MAX_INT_L
- See Also:
- Constant Field Values
-
MIN_LONG_D
static final double MIN_LONG_D
- See Also:
- Constant Field Values
-
MAX_LONG_D
static final double MAX_LONG_D
- See Also:
- Constant Field Values
-
MIN_INT_D
static final double MIN_INT_D
- See Also:
- Constant Field Values
-
MAX_INT_D
static final double MAX_INT_D
- See Also:
- Constant Field Values
-
INT_0
protected static final int INT_0
- See Also:
- Constant Field Values
-
INT_1
protected static final int INT_1
- See Also:
- Constant Field Values
-
INT_2
protected static final int INT_2
- See Also:
- Constant Field Values
-
INT_3
protected static final int INT_3
- See Also:
- Constant Field Values
-
INT_4
protected static final int INT_4
- See Also:
- Constant Field Values
-
INT_5
protected static final int INT_5
- See Also:
- Constant Field Values
-
INT_6
protected static final int INT_6
- See Also:
- Constant Field Values
-
INT_7
protected static final int INT_7
- See Also:
- Constant Field Values
-
INT_8
protected static final int INT_8
- See Also:
- Constant Field Values
-
INT_9
protected static final int INT_9
- See Also:
- Constant Field Values
-
INT_MINUS
protected static final int INT_MINUS
- See Also:
- Constant Field Values
-
INT_PLUS
protected static final int INT_PLUS
- See Also:
- Constant Field Values
-
INT_DECIMAL_POINT
protected static final int INT_DECIMAL_POINT
- See Also:
- Constant Field Values
-
INT_e
protected static final int INT_e
- See Also:
- Constant Field Values
-
INT_E
protected static final int INT_E
- See Also:
- Constant Field Values
-
CHAR_NULL
protected static final char CHAR_NULL
- See Also:
- Constant Field Values
-
_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
-
-
Constructor Detail
-
CsvDecoder
public CsvDecoder(CsvParser owner, com.fasterxml.jackson.core.io.IOContext ctxt, java.io.Reader r, CsvSchema schema, 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()
-
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()
-
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
-
skipLeadingComments
public void skipLeadingComments() throws java.io.IOException
- Throws:
java.io.IOException
-
_skipCommentLines
protected int _skipCommentLines() 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
-
getNumberValue
public java.lang.Number getNumberValue() throws java.io.IOException
- 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
-
_parseNumericValue
protected void _parseNumericValue(int expType) 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:
expType
- Numeric type that we will immediately need, if any; mostly necessary to optimize handling of floating point numbers- Throws:
java.io.IOException
-
_parseSlowFloatValue
private final void _parseSlowFloatValue(int expType) throws java.io.IOException
- Throws:
java.io.IOException
-
_parseSlowIntValue
private final void _parseSlowIntValue(int expType, 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
-
-