Class FlexBuffersBuilder

java.lang.Object
io.objectbox.flatbuffers.FlexBuffersBuilder

public class FlexBuffersBuilder extends Object
Helper class that builds FlexBuffers

This class presents all necessary APIs to create FlexBuffers. A `ByteBuffer` will be used to store the data. It can be created internally, or passed down in the constructor.

There are some limitations when compared to original implementation in C++. Most notably:

  • No support for mutations (might change in the future).

  • Buffer size limited to Integer.MAX_VALUE

  • Since Java does not support unsigned type, all unsigned operations accepts an immediate higher representation of similar type.

  • Field Details

    • BUILDER_FLAG_NONE

      public static final int BUILDER_FLAG_NONE
      No keys or strings will be shared
      See Also:
    • BUILDER_FLAG_SHARE_KEYS

      public static final int BUILDER_FLAG_SHARE_KEYS
      Keys will be shared between elements. Identical keys will only be serialized once, thus possibly saving space. But serialization performance might be slower and consumes more memory.
      See Also:
    • BUILDER_FLAG_SHARE_STRINGS

      public static final int BUILDER_FLAG_SHARE_STRINGS
      Strings will be shared between elements. Identical strings will only be serialized once, thus possibly saving space. But serialization performance might be slower and consumes more memory. This is ideal if you expect many repeated strings on the message.
      See Also:
    • BUILDER_FLAG_SHARE_KEYS_AND_STRINGS

      public static final int BUILDER_FLAG_SHARE_KEYS_AND_STRINGS
      Strings and keys will be shared between elements.
      See Also:
    • BUILDER_FLAG_SHARE_KEY_VECTORS

      public static final int BUILDER_FLAG_SHARE_KEY_VECTORS
      Reserved for the future.
      See Also:
    • BUILDER_FLAG_SHARE_ALL

      public static final int BUILDER_FLAG_SHARE_ALL
      Reserved for the future.
      See Also:
    • WIDTH_8

      private static final int WIDTH_8
      See Also:
    • WIDTH_16

      private static final int WIDTH_16
      See Also:
    • WIDTH_32

      private static final int WIDTH_32
      See Also:
    • WIDTH_64

      private static final int WIDTH_64
      See Also:
    • bb

      private final ReadWriteBuf bb
    • stack

      private final ArrayList<FlexBuffersBuilder.Value> stack
    • keyPool

      private final HashMap<String,Integer> keyPool
    • stringPool

      private final HashMap<String,Integer> stringPool
    • flags

      private final int flags
    • finished

      private boolean finished
    • keyComparator

      private Comparator<FlexBuffersBuilder.Value> keyComparator
  • Constructor Details

    • FlexBuffersBuilder

      public FlexBuffersBuilder(int bufSize)
      Constructs a newly allocated FlexBuffersBuilder with BUILDER_FLAG_SHARE_KEYS set.
      Parameters:
      bufSize - size of buffer in bytes.
    • FlexBuffersBuilder

      public FlexBuffersBuilder()
      Constructs a newly allocated FlexBuffersBuilder with BUILDER_FLAG_SHARE_KEYS set.
    • FlexBuffersBuilder

      @Deprecated public FlexBuffersBuilder(ByteBuffer bb, int flags)
      Deprecated.
      Constructs a newly allocated FlexBuffersBuilder.
      Parameters:
      bb - `ByteBuffer` that will hold the message
      flags - Share flags
    • FlexBuffersBuilder

      public FlexBuffersBuilder(ReadWriteBuf bb, int flags)
    • FlexBuffersBuilder

      public FlexBuffersBuilder(ByteBuffer bb)
      Constructs a newly allocated FlexBuffersBuilder. By default same keys will be serialized only once
      Parameters:
      bb - `ByteBuffer` that will hold the message
  • Method Details

    • clear

      public void clear()
      Reset the FlexBuffersBuilder by purging all data that it holds.
    • getBuffer

      public ReadWriteBuf getBuffer()
      Return `ByteBuffer` containing FlexBuffer message. #finish() must be called before calling this function otherwise an assert will trigger.
      Returns:
      `ByteBuffer` with finished message
    • putNull

      public void putNull()
      Insert a null value into the buffer
    • putNull

      public void putNull(String key)
      Insert a null value into the buffer
      Parameters:
      key - key used to store element in map
    • putBoolean

      public void putBoolean(boolean val)
      Insert a single boolean into the buffer
      Parameters:
      val - true or false
    • putBoolean

      public void putBoolean(String key, boolean val)
      Insert a single boolean into the buffer
      Parameters:
      key - key used to store element in map
      val - true or false
    • putKey

      private int putKey(String key)
    • putInt

      public void putInt(int val)
      Adds a integer into the buff
      Parameters:
      val - integer
    • putInt

      public void putInt(String key, int val)
      Adds a integer into the buff
      Parameters:
      key - key used to store element in map
      val - integer
    • putInt

      public void putInt(String key, long val)
      Adds a integer into the buff
      Parameters:
      key - key used to store element in map
      val - 64-bit integer
    • putInt

      public void putInt(long value)
      Adds a 64-bit integer into the buff
      Parameters:
      value - integer
    • putUInt

      public void putUInt(int value)
      Adds a unsigned integer into the buff.
      Parameters:
      value - integer representing unsigned value
    • putUInt

      public void putUInt(long value)
      Adds a unsigned integer (stored in a signed 64-bit integer) into the buff.
      Parameters:
      value - integer representing unsigned value
    • putUInt64

      public void putUInt64(BigInteger value)
      Adds a 64-bit unsigned integer (stored as BigInteger) into the buff. Warning: This operation might be very slow.
      Parameters:
      value - integer representing unsigned value
    • putUInt64

      private void putUInt64(String key, long value)
    • putUInt

      private void putUInt(String key, long value)
    • putFloat

      public void putFloat(float value)
      Adds a 32-bit float into the buff.
      Parameters:
      value - float representing value
    • putFloat

      public void putFloat(String key, float val)
      Adds a 32-bit float into the buff.
      Parameters:
      key - key used to store element in map
      value - float representing value
    • putFloat

      public void putFloat(double value)
      Adds a 64-bit float into the buff.
      Parameters:
      value - float representing value
    • putFloat

      public void putFloat(String key, double val)
      Adds a 64-bit float into the buff.
      Parameters:
      key - key used to store element in map
      value - float representing value
    • putString

      public int putString(String value)
      Adds a String into the buffer
      Parameters:
      value - string
      Returns:
      start position of string in the buffer
    • putString

      public int putString(String key, String val)
      Adds a String into the buffer
      Parameters:
      key - key used to store element in map
      value - string
      Returns:
      start position of string in the buffer
    • writeString

      private FlexBuffersBuilder.Value writeString(int key, String s)
    • widthUInBits

      static int widthUInBits(long len)
    • writeBlob

      private FlexBuffersBuilder.Value writeBlob(int key, byte[] blob, int type, boolean trailing)
    • align

      private int align(int alignment)
    • writeInt

      private void writeInt(long value, int byteWidth)
    • putBlob

      public int putBlob(byte[] value)
      Adds a byte array into the message
      Parameters:
      value - byte array
      Returns:
      position in buffer as the start of byte array
    • putBlob

      public int putBlob(String key, byte[] val)
      Adds a byte array into the message
      Parameters:
      key - key used to store element in map
      value - byte array
      Returns:
      position in buffer as the start of byte array
    • startVector

      public int startVector()
      Start a new vector in the buffer.
      Returns:
      a reference indicating position of the vector in buffer. This reference must be passed along when the vector is finished using endVector()
    • endVector

      public int endVector(String key, int start, boolean typed, boolean fixed)
      Finishes a vector, but writing the information in the buffer
      Parameters:
      key - key used to store element in map
      start - reference for beginning of the vector. Returned by startVector()
      typed - boolean indicating whether vector is typed
      fixed - boolean indicating whether vector is fixed
      Returns:
      Reference to the vector
    • finish

      public ByteBuffer finish()
      Finish writing the message into the buffer. After that no other element must be inserted into the buffer. Also, you must call this function before start using the FlexBuffer message
      Returns:
      `ByteBuffer` containing the FlexBuffer message
    • createVector

      private FlexBuffersBuilder.Value createVector(int key, int start, int length, boolean typed, boolean fixed, FlexBuffersBuilder.Value keys)
    • writeOffset

      private void writeOffset(long val, int byteWidth)
    • writeAny

      private void writeAny(FlexBuffersBuilder.Value val, int byteWidth)
    • writeDouble

      private void writeDouble(double val, int byteWidth)
    • startMap

      public int startMap()
      Start a new map in the buffer.
      Returns:
      a reference indicating position of the map in buffer. This reference must be passed along when the map is finished using endMap()
    • endMap

      public int endMap(String key, int start)
      Finishes a map, but writing the information in the buffer
      Parameters:
      key - key used to store element in map
      start - reference for beginning of the map. Returned by startMap()
      Returns:
      Reference to the map
    • createKeyVector

      private FlexBuffersBuilder.Value createKeyVector(int start, int length)