Class FlexObjectConverter

java.lang.Object
io.objectbox.converter.FlexObjectConverter
All Implemented Interfaces:
PropertyConverter<Object,byte[]>
Direct Known Subclasses:
IntegerFlexMapConverter, LongFlexMapConverter, StringFlexMapConverter

public class FlexObjectConverter extends Object implements PropertyConverter<Object,byte[]>
Converts between Object properties and byte arrays using FlexBuffers.

Types are limited to those supported by FlexBuffers, including that map keys must be String. (There are subclasses available that auto-convert Integer and Long key maps, see convertToKey(java.lang.String).)

If any item requires 64 bits for storage in the FlexBuffers Map/Vector (a large Long, a Double) all integers are restored as Long, otherwise Integer. So e.g. when storing only a Long value of 1L, the value restored from the database will be of type Integer. (There are subclasses available that always restore as Long, see shouldRestoreAsLong(io.objectbox.flatbuffers.FlexBuffers.Reference).)

Values of type Float are always restored as Double. Cast to Float to obtain the original value.

  • Constructor Details

    • FlexObjectConverter

      public FlexObjectConverter()
  • Method Details

    • convertToDatabaseValue

      public byte[] convertToDatabaseValue(Object value)
      Specified by:
      convertToDatabaseValue in interface PropertyConverter<Object,byte[]>
    • checkMapKeyType

      protected void checkMapKeyType(Object rawKey)
      Checks Java map key is of the expected type, otherwise throws.
    • convertToEntityProperty

      public Object convertToEntityProperty(byte[] databaseValue)
      Specified by:
      convertToEntityProperty in interface PropertyConverter<Object,byte[]>
    • shouldRestoreAsLong

      protected boolean shouldRestoreAsLong(io.objectbox.flatbuffers.FlexBuffers.Reference reference)
      Returns true if the width in bytes stored in the private parentWidth field of FlexBuffers.Reference is 8. Note: FlexBuffers stores all items in a map/vector using the size of the widest item. However, an item's size is only as wide as needed, e.g. a 64-bit integer (Java Long, 8 bytes) will be reduced to 1 byte if it does not exceed its value range.