Package org.h2.mvstore.type
Class ObjectDataType
- java.lang.Object
-
- org.h2.mvstore.type.BasicDataType<java.lang.Object>
-
- org.h2.mvstore.type.ObjectDataType
-
- All Implemented Interfaces:
java.util.Comparator<java.lang.Object>
,DataType<java.lang.Object>
public class ObjectDataType extends BasicDataType<java.lang.Object>
A data type implementation for the most common data types, including serializable objects.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static class
ObjectDataType.AutoDetectDataType<T>
The base class for auto-detect data types.(package private) static class
ObjectDataType.BigDecimalType
The type for BigDecimal objects.(package private) static class
ObjectDataType.BigIntegerType
The type for BigInteger objects.(package private) static class
ObjectDataType.BooleanType
The type for boolean true and false.(package private) static class
ObjectDataType.ByteType
The type for byte objects.(package private) static class
ObjectDataType.CharacterType
The type for character objects.(package private) static class
ObjectDataType.DateType
The type for java.util.Date objects.(package private) static class
ObjectDataType.DoubleType
The type for double objects.(package private) static class
ObjectDataType.FloatType
The type for float objects.private static class
ObjectDataType.Holder
(package private) static class
ObjectDataType.IntegerType
The type for integer objects.(package private) static class
ObjectDataType.LongType
The type for long objects.(package private) static class
ObjectDataType.NullType
The type for the null value(package private) static class
ObjectDataType.ObjectArrayType
The type for object arrays.(package private) static class
ObjectDataType.SerializedObjectType
The type for serialized objects.(package private) static class
ObjectDataType.ShortType
The type for short objects.(package private) static class
ObjectDataType.StringType
The type for string objects.(package private) static class
ObjectDataType.UUIDType
The type for UUID objects.
-
Field Summary
Fields Modifier and Type Field Description (package private) static java.lang.Class<?>[]
COMMON_CLASSES
(package private) static long
DOUBLE_ONE_BITS
(package private) static long
DOUBLE_ZERO_BITS
(package private) static int
FLOAT_ONE_BITS
(package private) static int
FLOAT_ZERO_BITS
Constants for floating point synchronization.private ObjectDataType.AutoDetectDataType<java.lang.Object>
last
(package private) static int
TAG_BIG_DECIMAL_0
(package private) static int
TAG_BIG_DECIMAL_1
(package private) static int
TAG_BIG_DECIMAL_SMALL
(package private) static int
TAG_BIG_DECIMAL_SMALL_SCALED
(package private) static int
TAG_BIG_INTEGER_0
(package private) static int
TAG_BIG_INTEGER_1
(package private) static int
TAG_BIG_INTEGER_SMALL
(package private) static int
TAG_BOOLEAN_TRUE
For very common values (e.g.(package private) static int
TAG_BYTE_ARRAY_0_15
(package private) static int
TAG_DOUBLE_0
(package private) static int
TAG_DOUBLE_1
(package private) static int
TAG_DOUBLE_FIXED
(package private) static int
TAG_FLOAT_0
(package private) static int
TAG_FLOAT_1
(package private) static int
TAG_FLOAT_FIXED
(package private) static int
TAG_INTEGER_0_15
For small-values/small-arrays, we encode the value/array-length in the tag.(package private) static int
TAG_INTEGER_FIXED
(package private) static int
TAG_INTEGER_NEGATIVE
(package private) static int
TAG_LONG_0_7
(package private) static int
TAG_LONG_FIXED
(package private) static int
TAG_LONG_NEGATIVE
(package private) static int
TAG_STRING_0_15
(package private) static int
TYPE_ARRAY
(package private) static int
TYPE_BIG_DECIMAL
(package private) static int
TYPE_BIG_INTEGER
(package private) static int
TYPE_BOOLEAN
(package private) static int
TYPE_BYTE
(package private) static int
TYPE_CHAR
(package private) static int
TYPE_DATE
(package private) static int
TYPE_DOUBLE
(package private) static int
TYPE_FLOAT
(package private) static int
TYPE_INT
(package private) static int
TYPE_LONG
(package private) static int
TYPE_NULL
The type constants are also used as tag values.(package private) static int
TYPE_SERIALIZED_OBJECT
(package private) static int
TYPE_SHORT
(package private) static int
TYPE_STRING
(package private) static int
TYPE_UUID
-
Constructor Summary
Constructors Constructor Description ObjectDataType()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description int
compare(java.lang.Object a, java.lang.Object b)
Compare two keys.static int
compareNotNull(byte[] data1, byte[] data2)
Compare the contents of two byte arrays.java.lang.Object[]
createStorage(int size)
Create storage object of array type to hold valuesstatic java.lang.Object
deserialize(byte[] data)
De-serialize the byte array to an object.int
getMemory(java.lang.Object obj)
Calculates the amount of used memory in bytes.private static int
getTypeId(java.lang.Object obj)
(package private) static boolean
isArray(java.lang.Object obj)
Check whether this object is an array.(package private) static boolean
isBigDecimal(java.lang.Object obj)
Check whether this object is a BigDecimal.(package private) static boolean
isBigInteger(java.lang.Object obj)
Check whether this object is a BigInteger.(package private) static boolean
isDate(java.lang.Object obj)
Check whether this object is a date.private ObjectDataType.AutoDetectDataType<java.lang.Object>
newType(int typeId)
java.lang.Object
read(java.nio.ByteBuffer buff)
Read an object.private ObjectDataType.AutoDetectDataType
selectDataType(int typeId)
static byte[]
serialize(java.lang.Object obj)
Serialize the object to a byte array.(package private) ObjectDataType.AutoDetectDataType<java.lang.Object>
switchType(java.lang.Object obj)
Switch the last remembered type to match the type of the given object.void
write(WriteBuffer buff, java.lang.Object obj)
Write an object.-
Methods inherited from class org.h2.mvstore.type.BasicDataType
binarySearch, cast, equals, hashCode, isMemoryEstimationAllowed, read, write
-
-
-
-
Field Detail
-
TYPE_NULL
static final int TYPE_NULL
The type constants are also used as tag values.- See Also:
- Constant Field Values
-
TYPE_BOOLEAN
static final int TYPE_BOOLEAN
- See Also:
- Constant Field Values
-
TYPE_BYTE
static final int TYPE_BYTE
- See Also:
- Constant Field Values
-
TYPE_SHORT
static final int TYPE_SHORT
- See Also:
- Constant Field Values
-
TYPE_INT
static final int TYPE_INT
- See Also:
- Constant Field Values
-
TYPE_LONG
static final int TYPE_LONG
- See Also:
- Constant Field Values
-
TYPE_BIG_INTEGER
static final int TYPE_BIG_INTEGER
- See Also:
- Constant Field Values
-
TYPE_FLOAT
static final int TYPE_FLOAT
- See Also:
- Constant Field Values
-
TYPE_DOUBLE
static final int TYPE_DOUBLE
- See Also:
- Constant Field Values
-
TYPE_BIG_DECIMAL
static final int TYPE_BIG_DECIMAL
- See Also:
- Constant Field Values
-
TYPE_CHAR
static final int TYPE_CHAR
- See Also:
- Constant Field Values
-
TYPE_STRING
static final int TYPE_STRING
- See Also:
- Constant Field Values
-
TYPE_UUID
static final int TYPE_UUID
- See Also:
- Constant Field Values
-
TYPE_DATE
static final int TYPE_DATE
- See Also:
- Constant Field Values
-
TYPE_ARRAY
static final int TYPE_ARRAY
- See Also:
- Constant Field Values
-
TYPE_SERIALIZED_OBJECT
static final int TYPE_SERIALIZED_OBJECT
- See Also:
- Constant Field Values
-
TAG_BOOLEAN_TRUE
static final int TAG_BOOLEAN_TRUE
For very common values (e.g. 0 and 1) we save space by encoding the value in the tag. e.g. TAG_BOOLEAN_TRUE and TAG_FLOAT_0.- See Also:
- Constant Field Values
-
TAG_INTEGER_NEGATIVE
static final int TAG_INTEGER_NEGATIVE
- See Also:
- Constant Field Values
-
TAG_INTEGER_FIXED
static final int TAG_INTEGER_FIXED
- See Also:
- Constant Field Values
-
TAG_LONG_NEGATIVE
static final int TAG_LONG_NEGATIVE
- See Also:
- Constant Field Values
-
TAG_LONG_FIXED
static final int TAG_LONG_FIXED
- See Also:
- Constant Field Values
-
TAG_BIG_INTEGER_0
static final int TAG_BIG_INTEGER_0
- See Also:
- Constant Field Values
-
TAG_BIG_INTEGER_1
static final int TAG_BIG_INTEGER_1
- See Also:
- Constant Field Values
-
TAG_BIG_INTEGER_SMALL
static final int TAG_BIG_INTEGER_SMALL
- See Also:
- Constant Field Values
-
TAG_FLOAT_0
static final int TAG_FLOAT_0
- See Also:
- Constant Field Values
-
TAG_FLOAT_1
static final int TAG_FLOAT_1
- See Also:
- Constant Field Values
-
TAG_FLOAT_FIXED
static final int TAG_FLOAT_FIXED
- See Also:
- Constant Field Values
-
TAG_DOUBLE_0
static final int TAG_DOUBLE_0
- See Also:
- Constant Field Values
-
TAG_DOUBLE_1
static final int TAG_DOUBLE_1
- See Also:
- Constant Field Values
-
TAG_DOUBLE_FIXED
static final int TAG_DOUBLE_FIXED
- See Also:
- Constant Field Values
-
TAG_BIG_DECIMAL_0
static final int TAG_BIG_DECIMAL_0
- See Also:
- Constant Field Values
-
TAG_BIG_DECIMAL_1
static final int TAG_BIG_DECIMAL_1
- See Also:
- Constant Field Values
-
TAG_BIG_DECIMAL_SMALL
static final int TAG_BIG_DECIMAL_SMALL
- See Also:
- Constant Field Values
-
TAG_BIG_DECIMAL_SMALL_SCALED
static final int TAG_BIG_DECIMAL_SMALL_SCALED
- See Also:
- Constant Field Values
-
TAG_INTEGER_0_15
static final int TAG_INTEGER_0_15
For small-values/small-arrays, we encode the value/array-length in the tag.- See Also:
- Constant Field Values
-
TAG_LONG_0_7
static final int TAG_LONG_0_7
- See Also:
- Constant Field Values
-
TAG_STRING_0_15
static final int TAG_STRING_0_15
- See Also:
- Constant Field Values
-
TAG_BYTE_ARRAY_0_15
static final int TAG_BYTE_ARRAY_0_15
- See Also:
- Constant Field Values
-
FLOAT_ZERO_BITS
static final int FLOAT_ZERO_BITS
Constants for floating point synchronization.
-
FLOAT_ONE_BITS
static final int FLOAT_ONE_BITS
-
DOUBLE_ZERO_BITS
static final long DOUBLE_ZERO_BITS
-
DOUBLE_ONE_BITS
static final long DOUBLE_ONE_BITS
-
COMMON_CLASSES
static final java.lang.Class<?>[] COMMON_CLASSES
-
last
private ObjectDataType.AutoDetectDataType<java.lang.Object> last
-
-
Method Detail
-
createStorage
public java.lang.Object[] createStorage(int size)
Description copied from interface:DataType
Create storage object of array type to hold values- Parameters:
size
- number of values to hold- Returns:
- storage object
-
compare
public int compare(java.lang.Object a, java.lang.Object b)
Description copied from interface:DataType
Compare two keys.- Specified by:
compare
in interfacejava.util.Comparator<java.lang.Object>
- Specified by:
compare
in interfaceDataType<java.lang.Object>
- Overrides:
compare
in classBasicDataType<java.lang.Object>
- Parameters:
a
- the first keyb
- the second key- Returns:
- -1 if the first key is smaller, 1 if larger, and 0 if equal
-
getMemory
public int getMemory(java.lang.Object obj)
Description copied from interface:DataType
Calculates the amount of used memory in bytes.- Specified by:
getMemory
in interfaceDataType<java.lang.Object>
- Specified by:
getMemory
in classBasicDataType<java.lang.Object>
- Parameters:
obj
- the object- Returns:
- the used memory
-
write
public void write(WriteBuffer buff, java.lang.Object obj)
Description copied from interface:DataType
Write an object.- Specified by:
write
in interfaceDataType<java.lang.Object>
- Specified by:
write
in classBasicDataType<java.lang.Object>
- Parameters:
buff
- the target bufferobj
- the value
-
newType
private ObjectDataType.AutoDetectDataType<java.lang.Object> newType(int typeId)
-
selectDataType
private ObjectDataType.AutoDetectDataType selectDataType(int typeId)
-
read
public java.lang.Object read(java.nio.ByteBuffer buff)
Description copied from interface:DataType
Read an object.- Specified by:
read
in interfaceDataType<java.lang.Object>
- Specified by:
read
in classBasicDataType<java.lang.Object>
- Parameters:
buff
- the source buffer- Returns:
- the object
-
getTypeId
private static int getTypeId(java.lang.Object obj)
-
switchType
ObjectDataType.AutoDetectDataType<java.lang.Object> switchType(java.lang.Object obj)
Switch the last remembered type to match the type of the given object.- Parameters:
obj
- the object- Returns:
- the auto-detected type used
-
isBigInteger
static boolean isBigInteger(java.lang.Object obj)
Check whether this object is a BigInteger.- Parameters:
obj
- the object- Returns:
- true if yes
-
isBigDecimal
static boolean isBigDecimal(java.lang.Object obj)
Check whether this object is a BigDecimal.- Parameters:
obj
- the object- Returns:
- true if yes
-
isDate
static boolean isDate(java.lang.Object obj)
Check whether this object is a date.- Parameters:
obj
- the object- Returns:
- true if yes
-
isArray
static boolean isArray(java.lang.Object obj)
Check whether this object is an array.- Parameters:
obj
- the object- Returns:
- true if yes
-
serialize
public static byte[] serialize(java.lang.Object obj)
Serialize the object to a byte array.- Parameters:
obj
- the object to serialize- Returns:
- the byte array
-
deserialize
public static java.lang.Object deserialize(byte[] data)
De-serialize the byte array to an object.- Parameters:
data
- the byte array- Returns:
- the object
-
compareNotNull
public static int compareNotNull(byte[] data1, byte[] data2)
Compare the contents of two byte arrays. If the content or length of the first array is smaller than the second array, -1 is returned. If the content or length of the second array is smaller than the first array, 1 is returned. If the contents and lengths are the same, 0 is returned.This method interprets bytes as unsigned.
- Parameters:
data1
- the first byte array (must not be null)data2
- the second byte array (must not be null)- Returns:
- the result of the comparison (-1, 1 or 0)
-
-