Class SmileParser

java.lang.Object
com.fasterxml.jackson.core.JsonParser
com.fasterxml.jackson.core.base.ParserMinimalBase
com.fasterxml.jackson.dataformat.smile.SmileParserBase
com.fasterxml.jackson.dataformat.smile.SmileParser
All Implemented Interfaces:
com.fasterxml.jackson.core.Versioned, Closeable, AutoCloseable

public class SmileParser extends SmileParserBase
  • Field Details

    • JDK11_OR_LATER

      private static final boolean JDK11_OR_LATER
      Flag to indicate if the JDK version is 11 or later. This can be used in some methods to choose more optimal behavior. In particular, jdk9+ have different internals for the String class.
      Since:
      2.14.1
    • _objectCodec

      protected com.fasterxml.jackson.core.ObjectCodec _objectCodec
      Codec used for data binding when (if) requested.
    • _inputStream

      protected InputStream _inputStream
      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.
    • _inputBuffer

      protected byte[] _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.
    • _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.

    • _typeAsInt

      protected int _typeAsInt
      Type byte of the current token (as in)
    • _tokenIncomplete

      protected boolean _tokenIncomplete
      Flag that indicates that the current token has not yet been fully processed, and needs to be finished for some access (or skipped to obtain the next token)
  • Constructor Details

    • SmileParser

      public SmileParser(com.fasterxml.jackson.core.io.IOContext ctxt, int parserFeatures, int smileFeatures, com.fasterxml.jackson.core.ObjectCodec codec, com.fasterxml.jackson.core.sym.ByteQuadsCanonicalizer sym, InputStream in, byte[] inputBuffer, int start, int end, boolean bufferRecyclable)
  • Method Details

    • getCodec

      public com.fasterxml.jackson.core.ObjectCodec getCodec()
      Specified by:
      getCodec in class com.fasterxml.jackson.core.JsonParser
    • setCodec

      public void setCodec(com.fasterxml.jackson.core.ObjectCodec c)
      Specified by:
      setCodec in class com.fasterxml.jackson.core.JsonParser
    • handleSignature

      protected boolean handleSignature(boolean consumeFirstByte, boolean throwException) throws IOException
      Helper method called when it looks like input might contain the signature; and it is necessary to detect and handle signature to get configuration information it might have.
      Returns:
      True if valid signature was found and handled; false if not
      Throws:
      IOException
    • releaseBuffered

      public int releaseBuffered(OutputStream out) throws IOException
      Overrides:
      releaseBuffered in class com.fasterxml.jackson.core.JsonParser
      Throws:
      IOException
    • getInputSource

      public Object getInputSource()
      Overrides:
      getInputSource in class com.fasterxml.jackson.core.JsonParser
    • _nextByteGuaranteed

      private final byte _nextByteGuaranteed() throws IOException
      Throws:
      IOException
    • _loadMoreGuaranteed

      protected final void _loadMoreGuaranteed() throws IOException
      Throws:
      IOException
    • _loadMore

      protected final boolean _loadMore() throws IOException
      Throws:
      IOException
    • _loadToHaveAtLeast

      protected final void _loadToHaveAtLeast(int minAvailable) throws IOException
      Helper method that will try to load at least specified number bytes in input buffer, possible moving existing data around if necessary. Exception throws if not enough content can be read.
      Parameters:
      minAvailable - Minimum number of bytes we absolutely need
      Throws:
      IOException - if read failed, either due to I/O issue or because not enough content could be read before end-of-input.
    • _tryToLoadToHaveAtLeast

      protected final int _tryToLoadToHaveAtLeast(int minAvailable) throws IOException
      Helper method that will try to load at least specified number bytes in input buffer, possible moving existing data around if necessary.
      Returns:
      Number of bytes that were missing, if any; 0 for successful read
      Throws:
      IOException
      Since:
      2.12.3
    • _closeInput

      protected void _closeInput() throws IOException
      Specified by:
      _closeInput in class SmileParserBase
      Throws:
      IOException
    • hasTextCharacters

      public boolean hasTextCharacters()
      Specified by:
      hasTextCharacters in class com.fasterxml.jackson.core.base.ParserMinimalBase
    • _releaseBuffers2

      protected void _releaseBuffers2()
      Method called to release internal buffers owned by the base reader. This may be called along with _closeInput() (for example, when explicitly closing this reader instance), or separately (if need be).
      Specified by:
      _releaseBuffers2 in class SmileParserBase
    • nextToken

      public com.fasterxml.jackson.core.JsonToken nextToken() throws IOException
      Specified by:
      nextToken in class com.fasterxml.jackson.core.base.ParserMinimalBase
      Throws:
      IOException
    • _reportUnknownValueTypeToken

      private com.fasterxml.jackson.core.JsonToken _reportUnknownValueTypeToken(int ch) throws IOException
      Throws:
      IOException
    • _nextAfterHeader

      private com.fasterxml.jackson.core.JsonToken _nextAfterHeader() throws IOException
      Throws:
      IOException
    • _handleSharedString

      private final com.fasterxml.jackson.core.JsonToken _handleSharedString(int index) throws IOException
      Throws:
      IOException
    • _addSeenStringValue

      private final com.fasterxml.jackson.core.JsonToken _addSeenStringValue() throws IOException
      Throws:
      IOException
    • _expandSeenStringValues

      private final void _expandSeenStringValues(String newText)
    • finishToken

      public void finishToken() throws IOException
      Method for forcing full read of current token, even if it might otherwise only be read if data is accessed via getText() and similar methods.
      Overrides:
      finishToken in class com.fasterxml.jackson.core.JsonParser
      Throws:
      IOException
    • nextFieldName

      public boolean nextFieldName(com.fasterxml.jackson.core.SerializableString str) throws IOException
      Overrides:
      nextFieldName in class com.fasterxml.jackson.core.JsonParser
      Throws:
      IOException
    • nextFieldName

      public String nextFieldName() throws IOException
      Overrides:
      nextFieldName in class com.fasterxml.jackson.core.JsonParser
      Throws:
      IOException
    • _reportUnknownNameToken

      private String _reportUnknownNameToken(int ch) throws IOException
      Throws:
      IOException
    • nextTextValue

      public String nextTextValue() throws IOException
      Overrides:
      nextTextValue in class com.fasterxml.jackson.core.JsonParser
      Throws:
      IOException
    • nextIntValue

      public int nextIntValue(int defaultValue) throws IOException
      Overrides:
      nextIntValue in class com.fasterxml.jackson.core.JsonParser
      Throws:
      IOException
    • nextLongValue

      public long nextLongValue(long defaultValue) throws IOException
      Overrides:
      nextLongValue in class com.fasterxml.jackson.core.JsonParser
      Throws:
      IOException
    • nextBooleanValue

      public Boolean nextBooleanValue() throws IOException
      Overrides:
      nextBooleanValue in class com.fasterxml.jackson.core.JsonParser
      Throws:
      IOException
    • getText

      public String getText() throws IOException
      Method for accessing textual representation of the current event; if no current event (before first call to nextToken(), or after encountering end-of-input), returns null. Method can be called for any event.
      Specified by:
      getText in class com.fasterxml.jackson.core.base.ParserMinimalBase
      Throws:
      IOException
    • getTextCharacters

      public char[] getTextCharacters() throws IOException
      Specified by:
      getTextCharacters in class com.fasterxml.jackson.core.base.ParserMinimalBase
      Throws:
      IOException
    • getTextLength

      public int getTextLength() throws IOException
      Specified by:
      getTextLength in class com.fasterxml.jackson.core.base.ParserMinimalBase
      Throws:
      IOException
    • getTextOffset

      public int getTextOffset() throws IOException
      Specified by:
      getTextOffset in class com.fasterxml.jackson.core.base.ParserMinimalBase
      Throws:
      IOException
    • getValueAsString

      public String getValueAsString() throws IOException
      Overrides:
      getValueAsString in class com.fasterxml.jackson.core.base.ParserMinimalBase
      Throws:
      IOException
    • getValueAsString

      public String getValueAsString(String defaultValue) throws IOException
      Overrides:
      getValueAsString in class com.fasterxml.jackson.core.base.ParserMinimalBase
      Throws:
      IOException
    • getText

      public int getText(Writer writer) throws IOException
      Overrides:
      getText in class com.fasterxml.jackson.core.JsonParser
      Throws:
      IOException
    • getBinaryValue

      public byte[] getBinaryValue(com.fasterxml.jackson.core.Base64Variant b64variant) throws IOException
      Specified by:
      getBinaryValue in class com.fasterxml.jackson.core.base.ParserMinimalBase
      Throws:
      IOException
    • getEmbeddedObject

      public Object getEmbeddedObject() throws IOException
      Overrides:
      getEmbeddedObject in class com.fasterxml.jackson.core.JsonParser
      Throws:
      IOException
    • readBinaryValue

      public int readBinaryValue(com.fasterxml.jackson.core.Base64Variant b64variant, OutputStream out) throws IOException
      Overrides:
      readBinaryValue in class com.fasterxml.jackson.core.JsonParser
      Throws:
      IOException
    • _readBinaryEncoded

      private void _readBinaryEncoded(OutputStream out, int length, byte[] buffer) throws IOException
      Throws:
      IOException
    • _getBinaryFromString

      private final byte[] _getBinaryFromString(com.fasterxml.jackson.core.Base64Variant variant) throws IOException
      Throws:
      IOException
    • _handleFieldName

      protected final com.fasterxml.jackson.core.JsonToken _handleFieldName() throws IOException
      Method that handles initial token type recognition for token that has to be either FIELD_NAME or END_OBJECT.
      Throws:
      IOException
    • _findOrDecodeShortAsciiName

      private String _findOrDecodeShortAsciiName(int len) throws IOException
      Throws:
      IOException
    • _findOrDecodeShortUnicodeName

      private String _findOrDecodeShortUnicodeName(int len) throws IOException
      Throws:
      IOException
    • _expandSeenNames

      private final String[] _expandSeenNames(String[] oldShared)
      Method called to try to expand shared name area to fit one more potentially shared String. If area is already at its biggest size, will just clear the area (by setting next-offset to 0)
    • _addDecodedToSymbols

      private final String _addDecodedToSymbols(int len, String name) throws IOException
      Throws:
      IOException
    • _decodeShortAsciiName

      private final String _decodeShortAsciiName(int len) throws IOException
      Throws:
      IOException
    • _decodeShortUnicodeName

      private final String _decodeShortUnicodeName(int len) throws IOException
      Helper method used to decode short Unicode string, length for which actual length (in bytes) is known
      Parameters:
      len - Length between 1 and 64
      Throws:
      IOException
    • _decodeLongUnicodeName

      private final String _decodeLongUnicodeName(int[] quads, int byteLen, int quadLen, boolean addToSymbolTable) throws IOException
      Throws:
      IOException
    • _handleLongFieldName

      private final String _handleLongFieldName() throws IOException
      Throws:
      IOException
    • _findDecodedFromSymbols

      private final String _findDecodedFromSymbols(int len) throws IOException
      Helper method for trying to find specified encoded UTF-8 byte sequence from symbol table; if successful avoids actual decoding to String.

      NOTE: caller MUST ensure input buffer has enough content.

      Throws:
      IOException
    • _findDecodedFixed12

      private final String _findDecodedFixed12(int len, int q1, int q2) throws IOException
      Method for locating names longer than 12 bytes (in UTF-8)
      Throws:
      IOException
    • _growArrayTo

      private static int[] _growArrayTo(int[] arr, int minSize)
    • _padLastQuad

      private static final int _padLastQuad(int q, int bytes)
    • _padQuadForNulls

      private static final int _padQuadForNulls(int firstByte)
    • _parseNumericValue

      protected void _parseNumericValue() throws IOException
      Specified by:
      _parseNumericValue in class SmileParserBase
      Throws:
      IOException
    • _finishToken

      protected final void _finishToken() throws IOException
      Method called to finish parsing of a token so that token contents are retrievable
      Throws:
      IOException
    • _finishNumberToken

      protected final void _finishNumberToken(int tb) throws IOException
      Throws:
      IOException
    • _finishInt

      private final void _finishInt() throws IOException
      Throws:
      IOException
    • _finishIntSlow

      private final void _finishIntSlow() throws IOException
      Throws:
      IOException
    • _finishLong

      private final void _finishLong() throws IOException
      Throws:
      IOException
    • _finishLongSlow

      private final void _finishLongSlow() throws IOException
      Throws:
      IOException
    • _fourBytesToInt

      private final int _fourBytesToInt() throws IOException
      Throws:
      IOException
    • _fourBytesToIntSlow

      private final int _fourBytesToIntSlow() throws IOException
      Throws:
      IOException
    • _finishBigInteger

      private final void _finishBigInteger() throws IOException
      Throws:
      IOException
    • _finishFloat

      private final void _finishFloat() throws IOException
      Throws:
      IOException
    • _finishDouble

      private final void _finishDouble() throws IOException
      Throws:
      IOException
    • _finishBigDecimal

      private final void _finishBigDecimal() throws IOException
      Throws:
      IOException
    • _readUnsignedVInt

      protected final int _readUnsignedVInt() throws IOException
      Throws:
      IOException
    • _readUnsignedVIntSlow

      protected final int _readUnsignedVIntSlow() throws IOException
      Throws:
      IOException
    • _reportInvalidUnsignedVInt

      protected final void _reportInvalidUnsignedVInt(int firstCh, int lastCh) throws IOException
      Throws:
      IOException
    • _decodeShortAsciiValue

      protected final String _decodeShortAsciiValue(int len) throws IOException
      Throws:
      IOException
    • _decodeShortUnicodeValue

      protected final String _decodeShortUnicodeValue(int byteLen) throws IOException
      Throws:
      IOException
    • _decodeLongAsciiValue

      private final void _decodeLongAsciiValue() throws IOException
      Throws:
      IOException
    • _decodeLongUnicodeValue

      private final void _decodeLongUnicodeValue() throws IOException
      Throws:
      IOException
    • _finishBinaryRaw

      private final byte[] _finishBinaryRaw() throws IOException
      Throws:
      IOException
    • _finishBinaryRawLong

      protected byte[] _finishBinaryRawLong(int expLen) throws IOException
      Throws:
      IOException
    • _read7BitBinaryWithLength

      private final byte[] _read7BitBinaryWithLength() throws IOException
      Throws:
      IOException
    • _finishBinary7BitLong

      protected byte[] _finishBinary7BitLong(int expLen) throws IOException
      Throws:
      IOException
    • _skipIncomplete

      protected void _skipIncomplete() throws IOException
      Method called to skip remainders of an incomplete token, when contents themselves will not be needed any more
      Throws:
      IOException
    • _skipBytes

      protected void _skipBytes(int len) throws IOException
      Throws:
      IOException
    • _skip7BitBinary

      protected void _skip7BitBinary() throws IOException
      Helper method for skipping length-prefixed binary data section
      Throws:
      IOException
    • _decodeUtf8_2

      private final int _decodeUtf8_2(int c) throws IOException
      Throws:
      IOException
    • _decodeUtf8_3

      private final int _decodeUtf8_3(int c1) throws IOException
      Throws:
      IOException
    • _decodeUtf8_3fast

      private final int _decodeUtf8_3fast(int c1) throws IOException
      Throws:
      IOException
    • _decodeUtf8_4

      private final int _decodeUtf8_4(int c) throws IOException
      Returns:
      Character value minus 0x10000; this so that caller can readily expand it to actual surrogates
      Throws:
      IOException
    • _reportInvalidSharedName

      protected void _reportInvalidSharedName(int index) throws IOException
      Throws:
      IOException
    • _reportInvalidSharedStringValue

      protected void _reportInvalidSharedStringValue(int index) throws IOException
      Throws:
      IOException
    • _reportInvalidInitial

      protected void _reportInvalidInitial(int mask) throws com.fasterxml.jackson.core.JsonParseException
      Throws:
      com.fasterxml.jackson.core.JsonParseException
    • _reportInvalidOther

      protected void _reportInvalidOther(int mask) throws com.fasterxml.jackson.core.JsonParseException
      Throws:
      com.fasterxml.jackson.core.JsonParseException
    • _reportInvalidOther

      protected void _reportInvalidOther(int mask, int ptr) throws com.fasterxml.jackson.core.JsonParseException
      Throws:
      com.fasterxml.jackson.core.JsonParseException
    • _reportIncompleteBinaryReadRaw

      protected void _reportIncompleteBinaryReadRaw(int expLen, int actLen) throws IOException
      Throws:
      IOException
    • _reportIncompleteBinaryRead7Bit

      protected void _reportIncompleteBinaryRead7Bit(int expLen, int actLen) throws IOException
      Throws:
      IOException
    • _reportTruncatedUTF8InString

      protected String _reportTruncatedUTF8InString(int strLenBytes, int truncatedCharOffset, int firstUTFByteValue, int bytesExpected) throws IOException
      Throws:
      IOException
    • _reportTruncatedUTF8InName

      protected String _reportTruncatedUTF8InName(int strLenBytes, int truncatedCharOffset, int firstUTFByteValue, int bytesExpected) throws IOException
      Throws:
      IOException
    • _eofAsNextToken

      private final com.fasterxml.jackson.core.JsonToken _eofAsNextToken() throws IOException
      Throws:
      IOException
    • createChildArrayContext

      private void createChildArrayContext(int lineNr, int colNr) throws IOException
      Throws:
      IOException
    • createChildObjectContext

      private void createChildObjectContext(int lineNr, int colNr) throws IOException
      Throws:
      IOException