com.fasterxml.jackson.databind.util

Class TokenBuffer

  • java.lang.Object
    • com.fasterxml.jackson.core.JsonGenerator
      • com.fasterxml.jackson.databind.util.TokenBuffer
  • All Implemented Interfaces:
    com.fasterxml.jackson.core.Versioned, Closeable, Flushable, AutoCloseable


    public class TokenBuffer
    extends com.fasterxml.jackson.core.JsonGenerator
    Utility class used for efficient storage of JsonToken sequences, needed for temporary buffering. Space efficient for different sequence lengths (especially so for smaller ones; but not significantly less efficient for larger), highly efficient for linear iteration and appending. Implemented as segmented/chunked linked list of tokens; only modifications are via appends.

    Note that before version 2.0, this class was located in the "core" bundle, not data-binding; but since it was only used by data binding, was moved here to reduce size of core package

    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class and Description
      protected static class  TokenBuffer.Parser 
      protected static class  TokenBuffer.Segment
      Individual segment of TokenBuffer that can store up to 16 tokens (limited by 4 bits per token type marker requirement).
      • Nested classes/interfaces inherited from class com.fasterxml.jackson.core.JsonGenerator

        com.fasterxml.jackson.core.JsonGenerator.Feature
    • Field Summary

      Fields 
      Modifier and Type Field and Description
      protected int _appendAt
      Offset within last segment,
      protected boolean _closed 
      protected TokenBuffer.Segment _first
      First segment, for contents this buffer has
      protected boolean _forceBigDecimal
      Flag set during construction, if use of BigDecimal is to be forced on all floating-point values.
      protected int _generatorFeatures
      Bit flag composed of bits that indicate which JsonGenerator.Features are enabled.
      protected boolean _hasNativeId
      Do we currently have a native type or object id buffered?
      protected boolean _hasNativeObjectIds 
      protected boolean _hasNativeTypeIds 
      protected TokenBuffer.Segment _last
      Last segment of this buffer, one that is used for appending more tokens
      protected boolean _mayHaveNativeIds 
      protected com.fasterxml.jackson.core.ObjectCodec _objectCodec
      Object codec to use for stream-based object conversion through parser/generator interfaces.
      protected Object _objectId
      If native object ids supported, this is the id for following value (or first token of one) to be written.
      protected com.fasterxml.jackson.core.JsonStreamContext _parentContext
      Parse context from "parent" parser (one from which content to buffer is read, if specified).
      protected Object _typeId
      If native type ids supported, this is the id for following value (or first token of one) to be written.
      protected com.fasterxml.jackson.core.json.JsonWriteContext _writeContext 
      protected static int DEFAULT_GENERATOR_FEATURES 
      • Fields inherited from class com.fasterxml.jackson.core.JsonGenerator

        _cfgPrettyPrinter, DEFAULT_BINARY_WRITE_CAPABILITIES, DEFAULT_TEXTUAL_WRITE_CAPABILITIES, DEFAULT_WRITE_CAPABILITIES
    • Constructor Summary

      Constructors 
      Constructor and Description
      TokenBuffer(com.fasterxml.jackson.core.JsonParser p) 
      TokenBuffer(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt) 
      TokenBuffer(com.fasterxml.jackson.core.ObjectCodec codec, boolean hasNativeIds) 
    • Field Detail

      • DEFAULT_GENERATOR_FEATURES

        protected static final int DEFAULT_GENERATOR_FEATURES
      • _objectCodec

        protected com.fasterxml.jackson.core.ObjectCodec _objectCodec
        Object codec to use for stream-based object conversion through parser/generator interfaces. If null, such methods cannot be used.
      • _parentContext

        protected com.fasterxml.jackson.core.JsonStreamContext _parentContext
        Parse context from "parent" parser (one from which content to buffer is read, if specified). Used, if available, when reading content, to present full context as if content was read from the original parser: this is useful in error reporting and sometimes processing as well.
      • _generatorFeatures

        protected int _generatorFeatures
        Bit flag composed of bits that indicate which JsonGenerator.Features are enabled.

        NOTE: most features have no effect on this class

      • _closed

        protected boolean _closed
      • _hasNativeTypeIds

        protected boolean _hasNativeTypeIds
        Since:
        2.3
      • _hasNativeObjectIds

        protected boolean _hasNativeObjectIds
        Since:
        2.3
      • _mayHaveNativeIds

        protected boolean _mayHaveNativeIds
        Since:
        2.3
      • _forceBigDecimal

        protected boolean _forceBigDecimal
        Flag set during construction, if use of BigDecimal is to be forced on all floating-point values.
        Since:
        2.7
      • _last

        protected TokenBuffer.Segment _last
        Last segment of this buffer, one that is used for appending more tokens
      • _appendAt

        protected int _appendAt
        Offset within last segment,
      • _typeId

        protected Object _typeId
        If native type ids supported, this is the id for following value (or first token of one) to be written.
      • _objectId

        protected Object _objectId
        If native object ids supported, this is the id for following value (or first token of one) to be written.
      • _hasNativeId

        protected boolean _hasNativeId
        Do we currently have a native type or object id buffered?
      • _writeContext

        protected com.fasterxml.jackson.core.json.JsonWriteContext _writeContext
    • Constructor Detail

      • TokenBuffer

        public TokenBuffer(com.fasterxml.jackson.core.ObjectCodec codec,
                           boolean hasNativeIds)
        Parameters:
        codec - Object codec to use for stream-based object conversion through parser/generator interfaces. If null, such methods cannot be used.
        hasNativeIds - Whether resulting JsonParser (if created) is considered to support native type and object ids
      • TokenBuffer

        public TokenBuffer(com.fasterxml.jackson.core.JsonParser p)
        Since:
        2.3
      • TokenBuffer

        public TokenBuffer(com.fasterxml.jackson.core.JsonParser p,
                           DeserializationContext ctxt)
        Since:
        2.7
    • Method Detail

      • asCopyOfValue

        public static TokenBuffer asCopyOfValue(com.fasterxml.jackson.core.JsonParser p)
                                         throws IOException
        Convenience method, equivalent to:
         TokenBuffer b = new TokenBuffer(p);
         b.copyCurrentStructure(p);
         return b;
        
        Throws:
        IOException
        Since:
        2.9
      • overrideParentContext

        public TokenBuffer overrideParentContext(com.fasterxml.jackson.core.JsonStreamContext ctxt)
        Method that allows explicitly specifying parent parse context to associate with contents of this buffer. Usually context is assigned at construction, based on given parser; but it is not always available, and may not contain intended context.
        Since:
        2.9
      • forceUseOfBigDecimal

        public TokenBuffer forceUseOfBigDecimal(boolean b)
        Since:
        2.7
      • version

        public com.fasterxml.jackson.core.Version version()
        Specified by:
        version in interface com.fasterxml.jackson.core.Versioned
        Specified by:
        version in class com.fasterxml.jackson.core.JsonGenerator
      • asParser

        public com.fasterxml.jackson.core.JsonParser asParser()
        Method used to create a JsonParser that can read contents stored in this buffer. Will use default _objectCodec for object conversions.

        Note: instances are not synchronized, that is, they are not thread-safe if there are concurrent appends to the underlying buffer.

        Returns:
        Parser that can be used for reading contents stored in this buffer
      • asParserOnFirstToken

        public com.fasterxml.jackson.core.JsonParser asParserOnFirstToken()
                                                                   throws IOException
        Same as:
          JsonParser p = asParser();
          p.nextToken();
          return p;
        
        Throws:
        IOException
        Since:
        2.9
      • asParser

        public com.fasterxml.jackson.core.JsonParser asParser(com.fasterxml.jackson.core.ObjectCodec codec)
        Method used to create a JsonParser that can read contents stored in this buffer.

        Note: instances are not synchronized, that is, they are not thread-safe if there are concurrent appends to the underlying buffer.

        Parameters:
        codec - Object codec to use for stream-based object conversion through parser/generator interfaces. If null, such methods cannot be used.
        Returns:
        Parser that can be used for reading contents stored in this buffer
      • asParser

        public com.fasterxml.jackson.core.JsonParser asParser(com.fasterxml.jackson.core.JsonParser src)
        Parameters:
        src - Parser to use for accessing source information like location, configured codec
      • firstToken

        public com.fasterxml.jackson.core.JsonToken firstToken()
      • isEmpty

        public boolean isEmpty()
        Accessor for checking whether this buffer has one or more tokens or not.
        Returns:
        True if this buffer instance has no tokens
        Since:
        2.13
      • append

        public TokenBuffer append(TokenBuffer other)
                           throws IOException
        Helper method that will append contents of given buffer into this buffer. Not particularly optimized; can be made faster if there is need.
        Returns:
        This buffer
        Throws:
        IOException
      • serialize

        public void serialize(com.fasterxml.jackson.core.JsonGenerator gen)
                       throws IOException
        Helper method that will write all contents of this buffer using given JsonGenerator.

        Note: this method would be enough to implement JsonSerializer for TokenBuffer type; but we cannot have upwards references (from core to mapper package); and as such we also cannot take second argument.

        Throws:
        IOException
      • enable

        public com.fasterxml.jackson.core.JsonGenerator enable(com.fasterxml.jackson.core.JsonGenerator.Feature f)
        Specified by:
        enable in class com.fasterxml.jackson.core.JsonGenerator
      • disable

        public com.fasterxml.jackson.core.JsonGenerator disable(com.fasterxml.jackson.core.JsonGenerator.Feature f)
        Specified by:
        disable in class com.fasterxml.jackson.core.JsonGenerator
      • isEnabled

        public boolean isEnabled(com.fasterxml.jackson.core.JsonGenerator.Feature f)
        Specified by:
        isEnabled in class com.fasterxml.jackson.core.JsonGenerator
      • getFeatureMask

        public int getFeatureMask()
        Specified by:
        getFeatureMask in class com.fasterxml.jackson.core.JsonGenerator
      • setFeatureMask

        @Deprecated
        public com.fasterxml.jackson.core.JsonGenerator setFeatureMask(int mask)
        Deprecated. 
        Specified by:
        setFeatureMask in class com.fasterxml.jackson.core.JsonGenerator
      • overrideStdFeatures

        public com.fasterxml.jackson.core.JsonGenerator overrideStdFeatures(int values,
                                                                            int mask)
        Overrides:
        overrideStdFeatures in class com.fasterxml.jackson.core.JsonGenerator
      • useDefaultPrettyPrinter

        public com.fasterxml.jackson.core.JsonGenerator useDefaultPrettyPrinter()
        Specified by:
        useDefaultPrettyPrinter in class com.fasterxml.jackson.core.JsonGenerator
      • setCodec

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

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

        public final com.fasterxml.jackson.core.json.JsonWriteContext getOutputContext()
        Specified by:
        getOutputContext in class com.fasterxml.jackson.core.JsonGenerator
      • canWriteBinaryNatively

        public boolean canWriteBinaryNatively()
        Since we can efficiently store byte[], yes.
        Overrides:
        canWriteBinaryNatively in class com.fasterxml.jackson.core.JsonGenerator
      • getWriteCapabilities

        public com.fasterxml.jackson.core.util.JacksonFeatureSet<com.fasterxml.jackson.core.StreamWriteCapability> getWriteCapabilities()
        Overrides:
        getWriteCapabilities in class com.fasterxml.jackson.core.JsonGenerator
      • flush

        public void flush()
                   throws IOException
        Specified by:
        flush in interface Flushable
        Specified by:
        flush in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • isClosed

        public boolean isClosed()
        Specified by:
        isClosed in class com.fasterxml.jackson.core.JsonGenerator
      • writeStartArray

        public final void writeStartArray()
                                   throws IOException
        Specified by:
        writeStartArray in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeStartArray

        public void writeStartArray(Object forValue)
                             throws IOException
        Overrides:
        writeStartArray in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeStartArray

        public void writeStartArray(Object forValue,
                                    int size)
                             throws IOException
        Overrides:
        writeStartArray in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeEndArray

        public final void writeEndArray()
                                 throws IOException
        Specified by:
        writeEndArray in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeStartObject

        public final void writeStartObject()
                                    throws IOException
        Specified by:
        writeStartObject in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeStartObject

        public void writeStartObject(Object forValue)
                              throws IOException
        Overrides:
        writeStartObject in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeStartObject

        public void writeStartObject(Object forValue,
                                     int size)
                              throws IOException
        Overrides:
        writeStartObject in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeEndObject

        public final void writeEndObject()
                                  throws IOException
        Specified by:
        writeEndObject in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeFieldName

        public final void writeFieldName(String name)
                                  throws IOException
        Specified by:
        writeFieldName in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeFieldName

        public void writeFieldName(com.fasterxml.jackson.core.SerializableString name)
                            throws IOException
        Specified by:
        writeFieldName in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeString

        public void writeString(String text)
                         throws IOException
        Specified by:
        writeString in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeString

        public void writeString(char[] text,
                                int offset,
                                int len)
                         throws IOException
        Specified by:
        writeString in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeString

        public void writeString(com.fasterxml.jackson.core.SerializableString text)
                         throws IOException
        Specified by:
        writeString in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeRawUTF8String

        public void writeRawUTF8String(byte[] text,
                                       int offset,
                                       int length)
                                throws IOException
        Specified by:
        writeRawUTF8String in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeUTF8String

        public void writeUTF8String(byte[] text,
                                    int offset,
                                    int length)
                             throws IOException
        Specified by:
        writeUTF8String in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeRaw

        public void writeRaw(String text)
                      throws IOException
        Specified by:
        writeRaw in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeRaw

        public void writeRaw(String text,
                             int offset,
                             int len)
                      throws IOException
        Specified by:
        writeRaw in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeRaw

        public void writeRaw(com.fasterxml.jackson.core.SerializableString text)
                      throws IOException
        Overrides:
        writeRaw in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeRaw

        public void writeRaw(char[] text,
                             int offset,
                             int len)
                      throws IOException
        Specified by:
        writeRaw in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeRaw

        public void writeRaw(char c)
                      throws IOException
        Specified by:
        writeRaw in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeRawValue

        public void writeRawValue(String text)
                           throws IOException
        Specified by:
        writeRawValue in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeRawValue

        public void writeRawValue(String text,
                                  int offset,
                                  int len)
                           throws IOException
        Specified by:
        writeRawValue in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeRawValue

        public void writeRawValue(char[] text,
                                  int offset,
                                  int len)
                           throws IOException
        Specified by:
        writeRawValue in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeNumber

        public void writeNumber(short i)
                         throws IOException
        Overrides:
        writeNumber in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeNumber

        public void writeNumber(int i)
                         throws IOException
        Specified by:
        writeNumber in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeNumber

        public void writeNumber(long l)
                         throws IOException
        Specified by:
        writeNumber in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeNumber

        public void writeNumber(double d)
                         throws IOException
        Specified by:
        writeNumber in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeNumber

        public void writeNumber(float f)
                         throws IOException
        Specified by:
        writeNumber in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeNumber

        public void writeNumber(BigDecimal dec)
                         throws IOException
        Specified by:
        writeNumber in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeNumber

        public void writeNumber(BigInteger v)
                         throws IOException
        Specified by:
        writeNumber in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeNumber

        public void writeNumber(String encodedValue)
                         throws IOException
        Specified by:
        writeNumber in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeBoolean

        public void writeBoolean(boolean state)
                          throws IOException
        Specified by:
        writeBoolean in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeNull

        public void writeNull()
                       throws IOException
        Specified by:
        writeNull in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeObject

        public void writeObject(Object value)
                         throws IOException
        Specified by:
        writeObject in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeTree

        public void writeTree(com.fasterxml.jackson.core.TreeNode node)
                       throws IOException
        Specified by:
        writeTree in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeBinary

        public void writeBinary(com.fasterxml.jackson.core.Base64Variant b64variant,
                                byte[] data,
                                int offset,
                                int len)
                         throws IOException
        Specified by:
        writeBinary in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • writeBinary

        public int writeBinary(com.fasterxml.jackson.core.Base64Variant b64variant,
                               InputStream data,
                               int dataLength)
        Although we could support this method, it does not necessarily make sense: we cannot make good use of streaming because buffer must hold all the data. Because of this, currently this will simply throw UnsupportedOperationException
        Specified by:
        writeBinary in class com.fasterxml.jackson.core.JsonGenerator
      • canWriteTypeId

        public boolean canWriteTypeId()
        Overrides:
        canWriteTypeId in class com.fasterxml.jackson.core.JsonGenerator
      • canWriteObjectId

        public boolean canWriteObjectId()
        Overrides:
        canWriteObjectId in class com.fasterxml.jackson.core.JsonGenerator
      • writeTypeId

        public void writeTypeId(Object id)
        Overrides:
        writeTypeId in class com.fasterxml.jackson.core.JsonGenerator
      • writeObjectId

        public void writeObjectId(Object id)
        Overrides:
        writeObjectId in class com.fasterxml.jackson.core.JsonGenerator
      • writeEmbeddedObject

        public void writeEmbeddedObject(Object object)
                                 throws IOException
        Overrides:
        writeEmbeddedObject in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • copyCurrentEvent

        public void copyCurrentEvent(com.fasterxml.jackson.core.JsonParser p)
                              throws IOException
        Overrides:
        copyCurrentEvent in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • copyCurrentStructure

        public void copyCurrentStructure(com.fasterxml.jackson.core.JsonParser p)
                                  throws IOException
        Overrides:
        copyCurrentStructure in class com.fasterxml.jackson.core.JsonGenerator
        Throws:
        IOException
      • _copyBufferContents

        protected void _copyBufferContents(com.fasterxml.jackson.core.JsonParser p)
                                    throws IOException
        Throws:
        IOException
      • _appendValue

        protected final void _appendValue(com.fasterxml.jackson.core.JsonToken type)
        Method used for appending token known to represent a "simple" scalar value where token is the only information
        Since:
        2.6.4
      • _appendValue

        protected final void _appendValue(com.fasterxml.jackson.core.JsonToken type,
                                          Object value)
        Method used for appending token known to represent a scalar value where there is additional content (text, number) beyond type token
        Since:
        2.6.4
      • _appendFieldName

        protected final void _appendFieldName(Object value)
        Specialized method used for appending a field name, appending either String or SerializableString.
        Since:
        2.10
      • _appendStartMarker

        protected final void _appendStartMarker(com.fasterxml.jackson.core.JsonToken type)
        Specialized method used for appending a structural start Object/Array marker
        Since:
        2.10
      • _appendEndMarker

        protected final void _appendEndMarker(com.fasterxml.jackson.core.JsonToken type)
        Specialized method used for appending a structural end Object/Array marker
        Since:
        2.10
      • _reportUnsupportedOperation

        protected void _reportUnsupportedOperation()
        Overrides:
        _reportUnsupportedOperation in class com.fasterxml.jackson.core.JsonGenerator

Copyright © 2008–2021 FasterXML. All rights reserved.