NonBlockingJsonParser (Jackson-core 2.13.0 API)
Date: 2021-09-30

com.fasterxml.jackson.core.json.async

## Class NonBlockingJsonParser

- java.lang.Object
- - com.fasterxml.jackson.core.JsonParser
  - - com.fasterxml.jackson.core.base.ParserMinimalBase
    - - com.fasterxml.jackson.core.base.ParserBase
      - - com.fasterxml.jackson.core.json.async.NonBlockingJsonParserBase
        - - com.fasterxml.jackson.core.json.async.NonBlockingJsonParser

- All Implemented Interfaces:
    ByteArrayFeeder, NonBlockingInputFeeder, Versioned, Closeable, AutoCloseable

      public class NonBlockingJsonParser
      extends NonBlockingJsonParserBase
      implements ByteArrayFeeder

  Non-blocking parser implementation for JSON content.

  NOTE: only supports parsing of UTF-8 encoded content (and 7-bit US-ASCII since it is strict subset of UTF-8): other encodings are not supported.

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class com.fasterxml.jackson.core.JsonParser

      `JsonParser.Feature, JsonParser.NumberType`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected static int[]` | `_icLatin1`
    `protected byte[]` | `_inputBuffer` This buffer is actually provided via `NonBlockingInputFeeder`
    `protected int` | `_origBufferLen` In addition to current buffer pointer, and end pointer, we will also need to know number of bytes originally contained.

    - ### Fields inherited from class com.fasterxml.jackson.core.json.async.NonBlockingJsonParserBase

      `_currBufferStart, _currInputRowAlt, _endOfInput, _majorState, _majorStateAfterValue, _minorState, _minorStateAfterSplit, _nonStdTokenType, _pending32, _pendingBytes, _quad1, _quadBuffer, _quadLength, _quoted32, _quotedDigits, _symbols, MAJOR_ARRAY_ELEMENT_FIRST, MAJOR_ARRAY_ELEMENT_NEXT, MAJOR_CLOSED, MAJOR_INITIAL, MAJOR_OBJECT_FIELD_FIRST, MAJOR_OBJECT_FIELD_NEXT, MAJOR_OBJECT_VALUE, MAJOR_ROOT, MINOR_COMMENT_C, MINOR_COMMENT_CLOSING_ASTERISK, MINOR_COMMENT_CPP, MINOR_COMMENT_LEADING_SLASH, MINOR_COMMENT_YAML, MINOR_FIELD_APOS_NAME, MINOR_FIELD_LEADING_COMMA, MINOR_FIELD_LEADING_WS, MINOR_FIELD_NAME, MINOR_FIELD_NAME_ESCAPE, MINOR_FIELD_UNQUOTED_NAME, MINOR_NUMBER_EXPONENT_DIGITS, MINOR_NUMBER_EXPONENT_MARKER, MINOR_NUMBER_FRACTION_DIGITS, MINOR_NUMBER_INTEGER_DIGITS, MINOR_NUMBER_MINUS, MINOR_NUMBER_MINUSZERO, MINOR_NUMBER_ZERO, MINOR_ROOT_BOM, MINOR_ROOT_GOT_SEPARATOR, MINOR_ROOT_NEED_SEPARATOR, MINOR_VALUE_APOS_STRING, MINOR_VALUE_EXPECTING_COLON, MINOR_VALUE_EXPECTING_COMMA, MINOR_VALUE_LEADING_WS, MINOR_VALUE_STRING, MINOR_VALUE_STRING_ESCAPE, MINOR_VALUE_STRING_UTF8_2, MINOR_VALUE_STRING_UTF8_3, MINOR_VALUE_STRING_UTF8_4, MINOR_VALUE_TOKEN_ERROR, MINOR_VALUE_TOKEN_FALSE, MINOR_VALUE_TOKEN_NON_STD, MINOR_VALUE_TOKEN_NULL, MINOR_VALUE_TOKEN_TRUE, MINOR_VALUE_WS_AFTER_COMMA, NON_STD_TOKEN_INFINITY, NON_STD_TOKEN_MINUS_INFINITY, NON_STD_TOKEN_NAN, NON_STD_TOKEN_PLUS_INFINITY, NON_STD_TOKEN_VALUES, NON_STD_TOKENS`

    - ### Fields inherited from class com.fasterxml.jackson.core.base.ParserBase

      `_binaryValue, _byteArrayBuilder, _closed, _currInputProcessed, _currInputRow, _currInputRowStart, _expLength, _fractLength, _inputEnd, _inputPtr, _intLength, _ioContext, _nameCopied, _nameCopyBuffer, _nextToken, _numberBigDecimal, _numberBigInt, _numberDouble, _numberInt, _numberLong, _numberNegative, _numTypesValid, _parsingContext, _textBuffer, _tokenInputCol, _tokenInputRow, _tokenInputTotal, JSON_READ_CAPABILITIES`

    - ### Fields inherited from class com.fasterxml.jackson.core.base.ParserMinimalBase

      `_currToken, _lastClearedToken, BD_MAX_INT, BD_MAX_LONG, BD_MIN_INT, BD_MIN_LONG, BI_MAX_INT, BI_MAX_LONG, BI_MIN_INT, BI_MIN_LONG, CHAR_NULL, INT_0, INT_9, INT_APOS, INT_ASTERISK, INT_BACKSLASH, INT_COLON, INT_COMMA, INT_CR, INT_e, INT_E, INT_HASH, INT_LBRACKET, INT_LCURLY, INT_LF, INT_MINUS, INT_PERIOD, INT_PLUS, INT_QUOTE, INT_RBRACKET, INT_RCURLY, INT_SLASH, INT_SPACE, INT_TAB, MAX_ERROR_TOKEN_LENGTH, MAX_INT_D, MAX_INT_L, MAX_LONG_D, MIN_INT_D, MIN_INT_L, MIN_LONG_D, NO_BYTES, NO_INTS, NR_BIGDECIMAL, NR_BIGINT, NR_DOUBLE, NR_FLOAT, NR_INT, NR_LONG, NR_UNKNOWN`

    - ### Fields inherited from class com.fasterxml.jackson.core.JsonParser

      `_features, _requestPayload, DEFAULT_READ_CAPABILITIES`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `NonBlockingJsonParser(IOContext ctxt, int parserFeatures, ByteQuadsCanonicalizer sym)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected char` | `_decodeEscaped()` Method that sub-classes must implement to support escaped sequences in base64-encoded sections.
    `protected JsonToken` | `_finishErrorToken()`
    `protected JsonToken` | `_finishErrorTokenWithEOF()`
    `protected JsonToken` | `_finishFieldWithEscape()`
    `protected JsonToken` | `_finishFloatExponent(boolean checkSign, int ch)`
    `protected JsonToken` | `_finishFloatFraction()`
    `protected JsonToken` | `_finishKeywordToken(String expToken, int matched, JsonToken result)`
    `protected JsonToken` | `_finishKeywordTokenWithEOF(String expToken, int matched, JsonToken result)`
    `protected JsonToken` | `_finishNonStdToken(int type, int matched)`
    `protected JsonToken` | `_finishNonStdTokenWithEOF(int type, int matched)`
    `protected JsonToken` | `_finishNumberIntegralPart(char[] outBuf, int outPtr)`
    `protected JsonToken` | `_finishNumberLeadingNegZeroes()`
    `protected JsonToken` | `_finishNumberLeadingZeroes()`
    `protected JsonToken` | `_finishNumberMinus(int ch)`
    `protected JsonToken` | `_finishToken()` Method called when decoding of a token has been started, but not yet completed due to missing input; method is to continue decoding due to at least one more byte being made available to decode.
    `protected JsonToken` | `_finishTokenWithEOF()` Method similar to `_finishToken()`, but called when no more input is available, and end-of-input has been detected.
    `protected JsonToken` | `_reportErrorToken(String actualToken)`
    `protected JsonToken` | `_startAposString()`
    `protected JsonToken` | `_startFalseToken()`
    `protected JsonToken` | `_startFloat(char[] outBuf, int outPtr, int ch)`
    `protected JsonToken` | `_startFloatThatStartsWithPeriod()`
    `protected JsonToken` | `_startNegativeNumber()`
    `protected JsonToken` | `_startNullToken()`
    `protected JsonToken` | `_startNumberLeadingZero()`
    `protected JsonToken` | `_startPositiveNumber(int ch)`
    `protected JsonToken` | `_startString()`
    `protected JsonToken` | `_startTrueToken()`
    `protected JsonToken` | `_startUnexpectedValue(boolean leadingComma, int ch)`
    `void` | `endOfInput()` Method that should be called after last chunk of data to parse has been fed (with `feedInput` in sub-class); can be called regardless of what `NonBlockingInputFeeder.needMoreInput()` returns.
    `void` | `feedInput(byte[] buf, int start, int end)` Method that can be called to feed more data, if (and only if) `NonBlockingInputFeeder.needMoreInput()` returns true.
    `ByteArrayFeeder` | `getNonBlockingInputFeeder()` Method that will either return a feeder instance (if parser uses non-blocking, aka asynchronous access); or `null` for parsers that use blocking I/O.
    `boolean` | `needMoreInput()` Method called to check whether it is ok to feed more data: parser returns true if it has no more content to parse (and it is ok to feed more); otherwise false (and no data should yet be fed).
    `JsonToken` | `nextToken()` Main iteration method, which will advance stream enough to determine type of the next token, if any.
    `int` | `releaseBuffered(OutputStream out)` Method that can be called to push back any content that has been read but not consumed by the parser.

    - ### Methods inherited from class com.fasterxml.jackson.core.json.async.NonBlockingJsonParserBase

      `_addName, _closeArrayScope, _closeInput, _closeObjectScope, _eofAsNextToken, _fieldComplete, _findName, _findName, _findName, _getText2, _nonStdToken, _padLastQuad, _releaseBuffers, _reportInvalidChar, _reportInvalidInitial, _reportInvalidOther, _reportInvalidOther, _startArrayScope, _startObjectScope, _updateTokenLocation, _valueComplete, _valueCompleteInt, _valueNonStdNumberComplete, canParseAsync, getBinaryValue, getCodec, getCurrentLocation, getEmbeddedObject, getInputSource, getReadCapabilities, getText, getText, getTextCharacters, getTextLength, getTextOffset, getTokenLocation, getValueAsString, getValueAsString, hasTextCharacters, readBinaryValue, setCodec, symbolTableForTests`

    - ### Methods inherited from class com.fasterxml.jackson.core.base.ParserBase

      `_checkStdFeatureChanges, _contentReference, _decodeBase64Escape, _decodeBase64Escape, _eofAsNextChar, _finishString, _getByteArrayBuilder, _getSourceReference, _handleBase64MissingPadding, _handleEOF, _handleUnrecognizedCharacterEscape, _parseIntValue, _parseNumericValue, _reportMismatchedEndMarker, _reportTooLongIntegral, _throwUnquotedSpace, _validJsonTokenList, _validJsonValueList, close, convertNumberToBigDecimal, convertNumberToBigInteger, convertNumberToDouble, convertNumberToInt, convertNumberToLong, disable, enable, getBigIntegerValue, getCurrentName, getCurrentValue, getDecimalValue, getDoubleValue, getFloatValue, getIntValue, getLongValue, getNumberType, getNumberValue, getNumberValueExact, getParsingContext, getTokenCharacterOffset, getTokenColumnNr, getTokenLineNr, growArrayBy, isClosed, isNaN, loadMore, loadMoreGuaranteed, overrideCurrentName, overrideStdFeatures, reportInvalidBase64Char, reportInvalidBase64Char, reset, resetAsNaN, resetFloat, resetInt, setCurrentValue, setFeatureMask, version`

    - ### Methods inherited from class com.fasterxml.jackson.core.base.ParserMinimalBase

      `_ascii, _asciiBytes, _constructError, _decodeBase64, _getCharDesc, _hasTextualNull, _longIntegerDesc, _longNumberDesc, _reportError, _reportError, _reportError, _reportInputCoercion, _reportInvalidEOF, _reportInvalidEOF, _reportInvalidEOF, _reportInvalidEOFInValue, _reportInvalidEOFInValue, _reportMissingRootWS, _reportUnexpectedChar, _throwInternal, _throwInvalidSpace, _wrapError, clearCurrentToken, currentToken, currentTokenId, getCurrentToken, getCurrentTokenId, getLastClearedToken, getValueAsBoolean, getValueAsDouble, getValueAsInt, getValueAsInt, getValueAsLong, getValueAsLong, hasCurrentToken, hasToken, hasTokenId, isExpectedNumberIntToken, isExpectedStartArrayToken, isExpectedStartObjectToken, nextValue, reportInvalidNumber, reportOverflowInt, reportOverflowInt, reportOverflowInt, reportOverflowLong, reportOverflowLong, reportOverflowLong, reportUnexpectedNumberChar, skipChildren`

    - ### Methods inherited from class com.fasterxml.jackson.core.JsonParser

      `_codec, _constructError, _constructReadException, _constructReadException, _constructReadException, _constructReadException, _constructReadException, _reportUnsupportedOperation, assignCurrentValue, canReadObjectId, canReadTypeId, canUseSchema, configure, currentLocation, currentName, currentTokenLocation, currentValue, finishToken, getBinaryValue, getBooleanValue, getByteValue, getFeatureMask, getFormatFeatures, getObjectId, getSchema, getShortValue, getTypeId, getValueAsBoolean, getValueAsDouble, isEnabled, isEnabled, nextBooleanValue, nextFieldName, nextFieldName, nextIntValue, nextLongValue, nextTextValue, overrideFormatFeatures, readBinaryValue, readValueAs, readValueAs, readValueAsTree, readValuesAs, readValuesAs, releaseBuffered, requiresCustomCodec, setRequestPayloadOnError, setRequestPayloadOnError, setRequestPayloadOnError, setSchema`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### _icLatin1

          protected static final int[] _icLatin1

    - #### _inputBuffer

          protected byte[] _inputBuffer

      This buffer is actually provided via `NonBlockingInputFeeder`

    - #### _origBufferLen

          protected int _origBufferLen

      In addition to current buffer pointer, and end pointer, we will also need to know number of bytes originally contained. This is needed to correctly update location information when the block has been completed.

  - ### Constructor Detail

    - #### NonBlockingJsonParser

          public NonBlockingJsonParser(IOContext ctxt,
                                       int parserFeatures,
                                       ByteQuadsCanonicalizer sym)

  - ### Method Detail

    - #### getNonBlockingInputFeeder

          public ByteArrayFeeder getNonBlockingInputFeeder()

      Description copied from class: `JsonParser`
      Method that will either return a feeder instance (if parser uses non-blocking, aka asynchronous access); or `null` for parsers that use blocking I/O.
      Overrides:
        `getNonBlockingInputFeeder` in class `JsonParser`
      Returns:
        Input feeder to use with non-blocking (async) parsing

    - #### needMoreInput

          public final boolean needMoreInput()

      Description copied from interface: `NonBlockingInputFeeder`
      Method called to check whether it is ok to feed more data: parser returns true if it has no more content to parse (and it is ok to feed more); otherwise false (and no data should yet be fed).
      Specified by:
        `needMoreInput` in interface `NonBlockingInputFeeder`
      Returns:
        `True` if more input is needed (and can be fed); `false` if there is still some input to decode

    - #### feedInput

          public void feedInput(byte[] buf,
                                int start,
                                int end)
                         throws IOException

      Description copied from interface: `ByteArrayFeeder`
      Method that can be called to feed more data, if (and only if) `NonBlockingInputFeeder.needMoreInput()` returns true.
      Specified by:
        `feedInput` in interface `ByteArrayFeeder`
      Parameters:
        `buf` - Byte array that contains data to feed: caller must ensure data remains stable until it is fully processed (which is true when `NonBlockingInputFeeder.needMoreInput()` returns true)
        `start` - Offset within array where input data to process starts
        `end` - Offset after last byte contained in the input array
      Throws:
        `IOException` - if the state is such that this method should not be called (has not yet consumed existing input data, or has been marked as closed)

    - #### endOfInput

          public void endOfInput()

      Description copied from interface: `NonBlockingInputFeeder`
      Method that should be called after last chunk of data to parse has been fed (with `feedInput` in sub-class); can be called regardless of what `NonBlockingInputFeeder.needMoreInput()` returns. After calling this method, no more data can be fed; and parser assumes no more data will be available.
      Specified by:
        `endOfInput` in interface `NonBlockingInputFeeder`

    - #### releaseBuffered

          public int releaseBuffered(OutputStream out)
                              throws IOException

      Description copied from class: `JsonParser`
      Method that can be called to push back any content that has been read but not consumed by the parser. This is usually done after reading all content of interest using parser. Content is released by writing it to given stream if possible; if underlying input is byte-based it can released, if not (char-based) it can not.
      Specified by:
        `releaseBuffered` in class `NonBlockingJsonParserBase`
      Parameters:
        `out` - OutputStream to which buffered, undecoded content is written to
      Returns:
        -1 if the underlying content source is not byte based (that is, input can not be sent to `OutputStream`; otherwise number of bytes released (0 if there was nothing to release)
      Throws:
        `IOException` - if write to stream threw exception

    - #### _decodeEscaped

          protected char _decodeEscaped()
                                 throws IOException

      Description copied from class: `ParserBase`
      Method that sub-classes must implement to support escaped sequences in base64-encoded sections. Sub-classes that do not need base64 support can leave this as is
      Overrides:
        `_decodeEscaped` in class `ParserBase`
      Returns:
        Character decoded, if any
      Throws:
        `IOException` - If escape decoding fails

    - #### nextToken

          public JsonToken nextToken()
                              throws IOException

      Description copied from class: `JsonParser`
      Main iteration method, which will advance stream enough to determine type of the next token, if any. If none remaining (stream has no content other than possible white space before ending), null will be returned.
      Specified by:
        `nextToken` in class `ParserMinimalBase`
      Returns:
        Next token from the stream, if any found, or null to indicate end-of-input
      Throws:
        `IOException` - for low-level read issues, or `JsonParseException` for decoding problems

    - #### _finishToken

          protected final JsonToken _finishToken()
                                          throws IOException

      Method called when decoding of a token has been started, but not yet completed due to missing input; method is to continue decoding due to at least one more byte being made available to decode.
      Returns:
        Token decoded, if complete; `JsonToken.NOT_AVAILABLE` if not
      Throws:
        `IOException` - (generally `JsonParseException`) for decoding problems

    - #### _finishTokenWithEOF

          protected final JsonToken _finishTokenWithEOF()
                                                 throws IOException

      Method similar to `_finishToken()`, but called when no more input is available, and end-of-input has been detected. This is usually problem case, but not always: root-level values may be properly terminated by this, and similarly trailing white-space may have been skipped.
      Returns:
        Token decoded, if complete; `JsonToken.NOT_AVAILABLE` if not
      Throws:
        `IOException` - (generally `JsonParseException`) for decoding problems

    - #### _startUnexpectedValue

          protected JsonToken _startUnexpectedValue(boolean leadingComma,
                                                    int ch)
                                             throws IOException

      Throws:
        `IOException`

    - #### _startFalseToken

          protected JsonToken _startFalseToken()
                                        throws IOException

      Throws:
        `IOException`

    - #### _startTrueToken

          protected JsonToken _startTrueToken()
                                       throws IOException

      Throws:
        `IOException`

    - #### _startNullToken

          protected JsonToken _startNullToken()
                                       throws IOException

      Throws:
        `IOException`

    - #### _finishKeywordToken

          protected JsonToken _finishKeywordToken(String expToken,
                                                  int matched,
                                                  JsonToken result)
                                           throws IOException

      Throws:
        `IOException`

    - #### _finishKeywordTokenWithEOF

          protected JsonToken _finishKeywordTokenWithEOF(String expToken,
                                                         int matched,
                                                         JsonToken result)
                                                  throws IOException

      Throws:
        `IOException`

    - #### _finishNonStdToken

          protected JsonToken _finishNonStdToken(int type,
                                                 int matched)
                                          throws IOException

      Throws:
        `IOException`

    - #### _finishNonStdTokenWithEOF

          protected JsonToken _finishNonStdTokenWithEOF(int type,
                                                        int matched)
                                                 throws IOException

      Throws:
        `IOException`

    - #### _finishErrorToken

          protected JsonToken _finishErrorToken()
                                         throws IOException

      Throws:
        `IOException`

    - #### _finishErrorTokenWithEOF

          protected JsonToken _finishErrorTokenWithEOF()
                                                throws IOException

      Throws:
        `IOException`

    - #### _reportErrorToken

          protected JsonToken _reportErrorToken(String actualToken)
                                         throws IOException

      Throws:
        `IOException`

    - #### _startFloatThatStartsWithPeriod

          protected JsonToken _startFloatThatStartsWithPeriod()
                                                       throws IOException

      Throws:
        `IOException`

    - #### _startPositiveNumber

          protected JsonToken _startPositiveNumber(int ch)
                                            throws IOException

      Throws:
        `IOException`

    - #### _startNegativeNumber

          protected JsonToken _startNegativeNumber()
                                            throws IOException

      Throws:
        `IOException`

    - #### _startNumberLeadingZero

          protected JsonToken _startNumberLeadingZero()
                                               throws IOException

      Throws:
        `IOException`

    - #### _finishNumberMinus

          protected JsonToken _finishNumberMinus(int ch)
                                          throws IOException

      Throws:
        `IOException`

    - #### _finishNumberLeadingZeroes

          protected JsonToken _finishNumberLeadingZeroes()
                                                  throws IOException

      Throws:
        `IOException`

    - #### _finishNumberLeadingNegZeroes

          protected JsonToken _finishNumberLeadingNegZeroes()
                                                     throws IOException

      Throws:
        `IOException`

    - #### _finishNumberIntegralPart

          protected JsonToken _finishNumberIntegralPart(char[] outBuf,
                                                        int outPtr)
                                                 throws IOException

      Throws:
        `IOException`

    - #### _startFloat

          protected JsonToken _startFloat(char[] outBuf,
                                          int outPtr,
                                          int ch)
                                   throws IOException

      Throws:
        `IOException`

    - #### _finishFloatFraction

          protected JsonToken _finishFloatFraction()
                                            throws IOException

      Throws:
        `IOException`

    - #### _finishFloatExponent

          protected JsonToken _finishFloatExponent(boolean checkSign,
                                                   int ch)
                                            throws IOException

      Throws:
        `IOException`

    - #### _finishFieldWithEscape

          protected final JsonToken _finishFieldWithEscape()
                                                    throws IOException

      Throws:
        `IOException`

    - #### _startString

          protected JsonToken _startString()
                                    throws IOException

      Throws:
        `IOException`

    - #### _startAposString

          protected JsonToken _startAposString()
                                        throws IOException

      Throws:
        `IOException`

Copyright © 2008–2021 FasterXML. All rights reserved.