Class CBORGenerator

java.lang.Object
com.fasterxml.jackson.core.JsonGenerator
com.fasterxml.jackson.core.base.GeneratorBase
com.fasterxml.jackson.dataformat.cbor.CBORGenerator
All Implemented Interfaces:
com.fasterxml.jackson.core.Versioned, Closeable, Flushable, AutoCloseable

public class CBORGenerator extends com.fasterxml.jackson.core.base.GeneratorBase
JsonGenerator implementation that writes CBOR encoded content.
  • Field Details

    • NO_INTS

      private static final int[] NO_INTS
    • BYTE_BUFFER_FOR_OUTPUT

      protected static final int BYTE_BUFFER_FOR_OUTPUT
      Let's ensure that we have big enough output buffer because of safety margins we need for UTF-8 encoding.
      See Also:
    • REPLACEMENT_CHAR

      protected static final int REPLACEMENT_CHAR
      The replacement character to use to fix invalid Unicode sequences (mismatched surrogate pair).
      Since:
      2.12
      See Also:
    • MAX_LONG_STRING_CHARS

      private static final int MAX_LONG_STRING_CHARS
      Longest char chunk we will output is chosen so that it is guaranteed to fit in an empty buffer even if everything encoded in 3-byte sequences; but also fit two full chunks in case of single-byte (ascii) output.
      See Also:
    • MAX_LONG_STRING_BYTES

      private static final int MAX_LONG_STRING_BYTES
      This is the worst case length (in bytes) of maximum chunk we ever write.
      See Also:
    • MIN_BUFFER_LENGTH

      private static final int MIN_BUFFER_LENGTH
      To simplify certain operations, we require output buffer length to allow outputting of contiguous 256 character UTF-8 encoded String value. Length of the longest UTF-8 code point (from Java char) is 3 bytes, and we need both initial token byte and single-byte end marker so we get following value.

      Note: actually we could live with shorter one; absolute minimum would be for encoding 64-character Strings.

      See Also:
    • INDEFINITE_LENGTH

      private static final int INDEFINITE_LENGTH
      Special value that is use to keep tracks of arrays and maps opened with infinite length
      See Also:
    • _streamWriteConstraints

      protected final com.fasterxml.jackson.core.StreamWriteConstraints _streamWriteConstraints
      Since:
      2.16
    • _out

      protected final OutputStream _out
    • _formatFeatures

      protected int _formatFeatures
      Bit flag composed of bits that indicate which CBORGenerator.Features are enabled.
    • _cfgMinimalInts

      protected boolean _cfgMinimalInts
    • _cfgMinimalDoubles

      protected boolean _cfgMinimalDoubles
    • _streamWriteContext

      protected CBORWriteContext _streamWriteContext
    • _outputBuffer

      protected byte[] _outputBuffer
      Intermediate buffer in which contents are buffered before being written using _out.
    • _outputTail

      protected int _outputTail
      Pointer to the next available byte in _outputBuffer
    • _outputEnd

      protected final int _outputEnd
      Offset to index after the last valid index in _outputBuffer. Typically same as length of the buffer.
    • _charBuffer

      protected char[] _charBuffer
      Intermediate buffer in which characters of a String are copied before being encoded.
    • _charBufferLength

      protected final int _charBufferLength
    • _bytesWritten

      protected int _bytesWritten
      Let's keep track of how many bytes have been output, may prove useful when debugging. This does not include bytes buffered in the output buffer, just bytes that have been written using underlying stream writer.
    • _elementCounts

      protected int[] _elementCounts
    • _elementCountsPtr

      protected int _elementCountsPtr
    • _currentRemainingElements

      protected int _currentRemainingElements
      Number of elements remaining in the current complex structure (if any), when writing defined-length Arrays, Objects; marker {code INDEFINITE_LENGTH} otherwise.
    • _bufferRecyclable

      protected boolean _bufferRecyclable
      Flag that indicates whether the output buffer is recycable (and needs to be returned to recycler once we are done) or not.
    • _stringRefs

      protected HashMap<Object,Integer> _stringRefs
      Table of previously referenced text and binary strings when the STRINGREF feature is used.
      Since:
      2.15
    • MAX_SHORT_STRING_CHARS

      private static final int MAX_SHORT_STRING_CHARS
      See Also:
    • MAX_SHORT_STRING_BYTES

      private static final int MAX_SHORT_STRING_BYTES
      See Also:
    • MAX_MEDIUM_STRING_CHARS

      private static final int MAX_MEDIUM_STRING_CHARS
      See Also:
    • MAX_MEDIUM_STRING_BYTES

      private static final int MAX_MEDIUM_STRING_BYTES
      See Also:
  • Constructor Details

    • CBORGenerator

      public CBORGenerator(com.fasterxml.jackson.core.io.IOContext ioCtxt, int stdFeatures, int formatFeatures, com.fasterxml.jackson.core.ObjectCodec codec, OutputStream out)
    • CBORGenerator

      public CBORGenerator(com.fasterxml.jackson.core.io.IOContext ioCtxt, int stdFeatures, int formatFeatures, com.fasterxml.jackson.core.ObjectCodec codec, OutputStream out, byte[] outputBuffer, int offset, boolean bufferRecyclable)
      Alternative constructor that may be used to feed partially initialized content.
      Parameters:
      outputBuffer - Buffer to use for output before flushing to the underlying stream
      offset - Offset pointing past already buffered content; that is, number of bytes of valid content to output, within buffer.
  • Method Details

    • version

      public com.fasterxml.jackson.core.Version version()
      Specified by:
      version in interface com.fasterxml.jackson.core.Versioned
      Overrides:
      version in class com.fasterxml.jackson.core.base.GeneratorBase
    • canWriteBinaryNatively

      public boolean canWriteBinaryNatively()
      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
    • streamWriteConstraints

      public com.fasterxml.jackson.core.StreamWriteConstraints streamWriteConstraints()
      Overrides:
      streamWriteConstraints in class com.fasterxml.jackson.core.JsonGenerator
    • useDefaultPrettyPrinter

      public com.fasterxml.jackson.core.JsonGenerator useDefaultPrettyPrinter()
      No way (or need) to indent anything, so let's block any attempts. (should we throw an exception instead?)
      Overrides:
      useDefaultPrettyPrinter in class com.fasterxml.jackson.core.base.GeneratorBase
    • setPrettyPrinter

      public com.fasterxml.jackson.core.JsonGenerator setPrettyPrinter(com.fasterxml.jackson.core.PrettyPrinter pp)
      No way (or need) to indent anything, so let's block any attempts. (should we throw an exception instead?)
      Overrides:
      setPrettyPrinter in class com.fasterxml.jackson.core.JsonGenerator
    • getOutputTarget

      public Object getOutputTarget()
      Overrides:
      getOutputTarget in class com.fasterxml.jackson.core.JsonGenerator
    • getOutputBuffered

      public int getOutputBuffered()
      Overrides:
      getOutputBuffered in class com.fasterxml.jackson.core.JsonGenerator
    • getFormatFeatures

      public int getFormatFeatures()
      Overrides:
      getFormatFeatures 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.base.GeneratorBase
    • overrideFormatFeatures

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

      public com.fasterxml.jackson.core.JsonStreamContext getOutputContext()
      Overrides:
      getOutputContext in class com.fasterxml.jackson.core.base.GeneratorBase
    • currentValue

      public Object currentValue()
      Overrides:
      currentValue in class com.fasterxml.jackson.core.base.GeneratorBase
    • assignCurrentValue

      public void assignCurrentValue(Object v)
      Overrides:
      assignCurrentValue in class com.fasterxml.jackson.core.base.GeneratorBase
    • getCurrentValue

      @Deprecated public Object getCurrentValue()
      Deprecated.
      Overrides:
      getCurrentValue in class com.fasterxml.jackson.core.JsonGenerator
    • setCurrentValue

      @Deprecated public void setCurrentValue(Object v)
      Deprecated.
      Overrides:
      setCurrentValue in class com.fasterxml.jackson.core.JsonGenerator
    • enable

    • disable

    • isEnabled

      public final boolean isEnabled(CBORGenerator.Feature f)
    • configure

      public CBORGenerator configure(CBORGenerator.Feature f, boolean state)
    • writeFieldName

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

      public final void writeFieldName(com.fasterxml.jackson.core.SerializableString name) throws IOException
      Overrides:
      writeFieldName in class com.fasterxml.jackson.core.base.GeneratorBase
      Throws:
      IOException
    • writeFieldId

      public final void writeFieldId(long id) throws IOException
      Overrides:
      writeFieldId in class com.fasterxml.jackson.core.JsonGenerator
      Throws:
      IOException
    • 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 elementsToWrite) throws IOException
      Overrides:
      writeStartArray in class com.fasterxml.jackson.core.JsonGenerator
      Throws:
      IOException
    • writeStartArray

      @Deprecated public void writeStartArray(int elementsToWrite) throws IOException
      Deprecated.
      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 final void writeStartObject(Object forValue) throws IOException
      Overrides:
      writeStartObject in class com.fasterxml.jackson.core.base.GeneratorBase
      Throws:
      IOException
    • writeStartObject

      public final void writeStartObject(int elementsToWrite) throws IOException
      Throws:
      IOException
    • writeStartObject

      public void writeStartObject(Object forValue, int elementsToWrite) 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
    • writeArray

      public void writeArray(int[] array, int offset, int length) throws IOException
      Overrides:
      writeArray in class com.fasterxml.jackson.core.JsonGenerator
      Throws:
      IOException
    • writeArray

      public void writeArray(long[] array, int offset, int length) throws IOException
      Overrides:
      writeArray in class com.fasterxml.jackson.core.JsonGenerator
      Throws:
      IOException
    • writeArray

      public void writeArray(double[] array, int offset, int length) throws IOException
      Overrides:
      writeArray in class com.fasterxml.jackson.core.JsonGenerator
      Throws:
      IOException
    • _pushRemainingElements

      private final void _pushRemainingElements()
    • _writeIntMinimal

      private final void _writeIntMinimal(int markerBase, int i) throws IOException
      Throws:
      IOException
    • _writeIntFull

      private final void _writeIntFull(int markerBase, int i) throws IOException
      Throws:
      IOException
    • _writeLongNoCheck

      private final void _writeLongNoCheck(long l) throws IOException
      Throws:
      IOException
    • _writeFloatNoCheck

      private final void _writeFloatNoCheck(float f) throws IOException
      Throws:
      IOException
    • _writeDoubleNoCheck

      private final void _writeDoubleNoCheck(double d) throws IOException
      Throws:
      IOException
    • _writeDoubleMinimal

      private final void _writeDoubleMinimal(double d) throws IOException
      Throws:
      IOException
    • writeString

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

      public final void writeString(com.fasterxml.jackson.core.SerializableString sstr) throws IOException
      Overrides:
      writeString in class com.fasterxml.jackson.core.base.GeneratorBase
      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
    • writeRawUTF8String

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

      public final void writeUTF8String(byte[] text, int offset, int len) 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(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
      Overrides:
      writeRawValue in class com.fasterxml.jackson.core.base.GeneratorBase
      Throws:
      IOException
    • writeRawValue

      public void writeRawValue(String text, int offset, int len) throws IOException
      Overrides:
      writeRawValue in class com.fasterxml.jackson.core.base.GeneratorBase
      Throws:
      IOException
    • writeRawValue

      public void writeRawValue(char[] text, int offset, int len) throws IOException
      Overrides:
      writeRawValue in class com.fasterxml.jackson.core.base.GeneratorBase
      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(InputStream data, int dataLength) throws IOException
      Overrides:
      writeBinary in class com.fasterxml.jackson.core.JsonGenerator
      Throws:
      IOException
    • writeBinary

      public int writeBinary(com.fasterxml.jackson.core.Base64Variant b64variant, InputStream data, int dataLength) throws IOException
      Overrides:
      writeBinary in class com.fasterxml.jackson.core.base.GeneratorBase
      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
    • 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(BigInteger v) throws IOException
      Specified by:
      writeNumber in class com.fasterxml.jackson.core.JsonGenerator
      Throws:
      IOException
    • _write

      protected void _write(BigInteger v) throws IOException
      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(String encodedValue) throws IOException, com.fasterxml.jackson.core.JsonGenerationException, UnsupportedOperationException
      Specified by:
      writeNumber in class com.fasterxml.jackson.core.JsonGenerator
      Throws:
      IOException
      com.fasterxml.jackson.core.JsonGenerationException
      UnsupportedOperationException
    • _verifyValueWrite

      protected final void _verifyValueWrite(String typeMsg) throws IOException
      Specified by:
      _verifyValueWrite in class com.fasterxml.jackson.core.base.GeneratorBase
      Throws:
      IOException
    • _failSizedArrayOrObject

      private void _failSizedArrayOrObject() throws IOException
      Throws:
      IOException
    • flush

      public final void flush() throws IOException
      Specified by:
      flush in interface Flushable
      Specified by:
      flush in class com.fasterxml.jackson.core.base.GeneratorBase
      Throws:
      IOException
    • close

      public void close() throws IOException
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Overrides:
      close in class com.fasterxml.jackson.core.base.GeneratorBase
      Throws:
      IOException
    • writeTag

      public void writeTag(int tagId) throws IOException
      Method for writing out an explicit CBOR Tag.
      Parameters:
      tagId - Positive integer (0 or higher)
      Throws:
      IOException
      Since:
      2.5
    • writeRaw

      public void writeRaw(byte b) throws IOException
      Method for directly inserting specified byte in output at current position.

      NOTE: only use this method if you really know what you are doing.

      Throws:
      IOException
    • writeBytes

      public void writeBytes(byte[] data, int offset, int len) throws IOException
      Method for directly inserting specified bytes in output at current position.

      NOTE: only use this method if you really know what you are doing.

      Throws:
      IOException
    • _writeString

      protected final void _writeString(String name) throws IOException
      Throws:
      IOException
    • _ensureSpace

      protected final void _ensureSpace(int needed) throws IOException
      Throws:
      IOException
    • _writeString

      protected final int _writeString(char[] text, int offset, int len) throws IOException
      Throws:
      IOException
    • _writeChunkedString

      protected final void _writeChunkedString(char[] text, int offset, int len) throws IOException
      Throws:
      IOException
    • _encode

      private final int _encode(int outputPtr, char[] str, int i, int end) throws IOException
      Helper method called when the whole character sequence is known to fit in the output buffer regardless of UTF-8 expansion.
      Throws:
      IOException
    • _shortUTF8Encode2

      private final int _shortUTF8Encode2(char[] str, int i, int end, int outputPtr, int outputStart) throws IOException
      Helper method called when the whole character sequence is known to fit in the output buffer, but not all characters are single-byte (ASCII) characters.
      Throws:
      IOException
    • _encode

      private final int _encode(int outputPtr, String str, int len) throws IOException
      Throws:
      IOException
    • _encode2

      private final int _encode2(int i, int outputPtr, String str, int len, int outputStart) throws IOException
      Throws:
      IOException
    • _invalidSurrogateStart

      private int _invalidSurrogateStart(int code, byte[] outBuf, int outputPtr) throws IOException
      Throws:
      IOException
    • _invalidSurrogateEnd

      private int _invalidSurrogateEnd(int surr1, int surr2, byte[] outBuf, int outputPtr) throws IOException
      Throws:
      IOException
    • _appendReplacementChar

      private int _appendReplacementChar(byte[] outBuf, int outputPtr)
    • _decodeAndWriteSurrogate

      private int _decodeAndWriteSurrogate(int surr1, int surr2, byte[] outBuf, int outputPtr)
    • _ensureRoomForOutput

      private final void _ensureRoomForOutput(int needed) throws IOException
      Throws:
      IOException
    • _writeIntValue

      private final void _writeIntValue(int i) throws IOException
      Throws:
      IOException
    • _writeLongValue

      private final void _writeLongValue(long l) throws IOException
      Throws:
      IOException
    • _writeLengthMarker

      private final void _writeLengthMarker(int majorType, int i) throws IOException
      Throws:
      IOException
    • _writeByte

      private final void _writeByte(byte b) throws IOException
      Throws:
      IOException
    • _writeBytes

      private final void _writeBytes(byte[] data, int offset, int len) throws IOException
      Throws:
      IOException
    • _writeBytes

      private final int _writeBytes(InputStream in, int bytesLeft) throws IOException
      Throws:
      IOException
    • _writeBytesLong

      private final void _writeBytesLong(byte[] data, int offset, int len) throws IOException
      Throws:
      IOException
    • _releaseBuffers

      protected void _releaseBuffers()
      Specified by:
      _releaseBuffers in class com.fasterxml.jackson.core.base.GeneratorBase
    • _flushBuffer

      protected final void _flushBuffer() throws IOException
      Throws:
      IOException
    • closeComplexElement

      private final void closeComplexElement() throws IOException
      Throws:
      IOException
    • _notSupported

      protected UnsupportedOperationException _notSupported()