Skip to end of metadata
Go to start of metadata

Purpose 

The purpose of this document to describe the native serialization of various data types which Geode understand. 

Data Types

Geode supports all the Java primitive data types and Java arrays and collections.. Custom Java objects can be serialized through Geode PdxSerializable and DataSerializable interfaces. The Application can attach its data serializer through the Geode DataSerializer and PdxSerializer interfaces. Objects implementing java.io.Serializable can be serialized with Geode as well.

In Geode, every supported data type is associated with a single-byte type Id. To serialize any date type Geode first writes the typeId. For variable sized objects, it then writes the length of the serialized object followed by the serialized bytes. For fixed data types it just writes the serialized bytes in Big Endian byte order.

For native serialization, strings are serialized using the Java Modified UTF-8 Format.

Data TypeGeode Region Key TypesType IdValueSerialized BytesDescription
Null 41 = 0x29null
typeId0x29
 
Boolean YES53 = 0x35true
typeId0x35
bytes0x01
 
Character YES54 = 0x36'a'
typeId0x36
bytes

0x00 0x61

 
Byte YES55 = 0x371
typeId0x37
bytes0x01
 
Short YES56 = 0x381000
typeId0x38
bytes0x03 0xE8
 
Integer YES57 = 0x391000
typeId0x39
bytes0x00 0x00 0x03 0xE8
 
Long YES58 = 0x3A1000
typeId0x3A
bytes0x00 0x00 0x00 0x00 0x00 0x00 0x03 0xE8
 
Float YES59 = 0x3B1000f
typeId0x3B
bytes

0x44 0x7A 0x00 0x00

 
Double YES60 = 0x3C1000d



typeId0x3C
bytes

0x40 0xF1 0x40 0x00 0x00 0x00 0x00 0x00

 
ASCII_STRINGYES87 = 0x57"hello"
typeid0x57
len0x00 0x05
bytes0x68 0x65 0x40 0x40 0x6F
This represents ASCII string with maximum length 0xFFFF. Code snippet to serialize and deserialize the string.
UTF_STRING YES42 = 0x2A  This represents UTF string with maximum length 0xFFFF. Code snippet to serialize and deserialize the string.
HUGE_ASCII_STRING YES88 = 0x58  This represents ASCII string with length greater than 0xFFFF. Code snippet to serialize and deserialize the string.
HUGE_UTF_STRING YES89 = 0x59  This represents UTF string with length greater than 0xFFFF. Code snippet to serialize and deserialize the string.
byte[] This we plan to support46 = 0x2Ebyte[] {1,2}
typeId0x2E
len0x02
bytes0x01 0x02
 
short[] 47 = 0x2Fshort[] {1,2}
typeId0x2F
len 0x02
bytes

0x00 0x01 0x00 0x02

 
int[] 48 = 0x30int[] {1,2}
typeId0x30
len 0x02
bytes

0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x02

 
long[] 49 = 0x31long[] {1}
typeId0x31
len 0x01
bytes

0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01

 
float[] 50 = 0x32float[] {2.0f}
typeId0x32
len 0x01
bytes

0x40 0x00 0x00 0x00

 
double[] 51 = 0x33double[] {2.0d}
typeId0x33
len0x01
bytes

0x40 0x00 0x00 0x00 0x00 0x00 0x00 0x00

 
string[] 64 = 0x40 String[]{"hello", "world"}
typeId0x40
len 0x02

"hello"

bytes

0x57 - ASCII_STRING

0x00 0x05

0x68 0x65 0x6c 0x6c 0x6f

 

"world"

bytes

0x57 -  ASCII_STRING

0x00 0x05 - len

0x77 0x6f 0x72 0x6c 0x64


 
Map 67 = 0x43

Map s = new HashMap<>();

 s.put("hello", "world")

typeId0x43
len 0x01

"hello"

bytes

0x57 - ASCII_STRING

0x00 0x05

0x68 0x65 0x6c 0x6c 0x6f

 

"world"

bytes

0x57 -  ASCII_STRING

0x00 0x05 - len

0x77 0x6f 0x72 0x6c 0x64

 
Set 66 = 0x42

Set s = new HashSet();

 s.add("hello");

s.add("world");


typeId0x42
len 0x02

"hello"

bytes

0x57 - ASCII_STRING

0x00 0x05

0x68 0x65 0x6c 0x6c 0x6f

"world"

bytes

0x57 -  ASCII_STRING

0x00 0x05 - len

0x77 0x6f 0x72 0x6c 0x64

 
List 10 = 0x0a

List s = new LinkedList();
s.add("hello");
s.add("world");

typeId0x0a
len 0x02

"hello"

bytes

0x57 - ASCII_STRING

0x00 0x05

0x68 0x65 0x6c 0x6c 0x6f

"world"

bytes

0x57 -  ASCII_STRING

0x00 0x05 - len

0x77 0x6f 0x72 0x6c 0x64

 
ArrayList 65=0x41

List s = new ArrayList();
s.add("hello");
s.add("world");

typeId0x41
len 0x02

"hello"

bytes

0x57 - ASCII_STRING

0x00 0x05

0x68 0x65 0x6c 0x6c 0x6f

"world"

bytes

0x57 -  ASCII_STRING

0x00 0x05 - len

0x77 0x6f 0x72 0x6c 0x64

 
PDX_SERIALIZATION 93=0x5D  Java Object can implement PdxSerializable interface to serialize data in pdx format
PDX_SERIALIZER    

The application can implement PdxSerializer interface and then install with geode cache

to serialize data in pdx format.

DATA_SERIALIZATION     Java Object can implement DataSerializable interface to serialize data.
USER_SERIALIZATION     

The application can implement DataSerializer interface and then install with geode cache

to serialize data.

JAVA_SERIALIZATIOn44= 0x2C    


Calculate Collection/Array Size

Geode calculates the size of collection or Array in following way

Write Array Length functionRead Array Length Function

 

Write And Read String

The String is serialized in following way. It distinguishes ASCII string and its size.

Write StringRead String
  • No labels