Package io.objectbox.converter
Class FlexObjectConverter
- java.lang.Object
-
- io.objectbox.converter.FlexObjectConverter
-
- All Implemented Interfaces:
PropertyConverter<java.lang.Object,byte[]>
- Direct Known Subclasses:
IntegerFlexMapConverter
,LongFlexMapConverter
,StringFlexMapConverter
public class FlexObjectConverter extends java.lang.Object implements PropertyConverter<java.lang.Object,byte[]>
Converts betweenObject
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-convertInteger
andLong
key maps, seeconvertToKey(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
, otherwiseInteger
. So e.g. when storing only aLong
value of1L
, the value restored from the database will be of typeInteger
. (There are subclasses available that always restore asLong
, seeshouldRestoreAsLong(io.objectbox.flatbuffers.FlexBuffers.Reference)
.)Values of type
Float
are always restored asDouble
. Cast toFloat
to obtain the original value.
-
-
Constructor Summary
Constructors Constructor Description FlexObjectConverter()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
checkMapKeyType(java.lang.Object rawKey)
Checks Java map key is of the expected type, otherwise throws.byte[]
convertToDatabaseValue(java.lang.Object value)
java.lang.Object
convertToEntityProperty(byte[] databaseValue)
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.
-
-
-
Method Detail
-
convertToDatabaseValue
public byte[] convertToDatabaseValue(java.lang.Object value)
- Specified by:
convertToDatabaseValue
in interfacePropertyConverter<java.lang.Object,byte[]>
-
checkMapKeyType
protected void checkMapKeyType(java.lang.Object rawKey)
Checks Java map key is of the expected type, otherwise throws.
-
convertToEntityProperty
public java.lang.Object convertToEntityProperty(byte[] databaseValue)
- Specified by:
convertToEntityProperty
in interfacePropertyConverter<java.lang.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.
-
-