FlatBuffers和NULL值

时间:2018-12-16 15:56:16

标签: serialization flatbuffers

在FlatBuffers中存储NULL值的规范方法是什么?

我有

ExpirationDate     *int64

我了解为什么FlatBuffers没有定义NULL。但我不知道如何正确处理。我应该有多余的布尔字段还是要为数组赋值?

ExpirationDate     [int64]

vs

ExpirationDate     int64
ExpirationDateNull bool

对于表,我也可以使用union

2 个答案:

答案 0 :(得分:3)

第三个选项是struct NullableInt64 { i:int64 },然后表中的字段类型为NullableInt64。当此字段不存在时,访问器函数将返回NULL。而且由于它是一个结构,它将在电线上与裸int64占用相同的空间(它们都是8个字节,并以内联方式存储在父级中)。

答案 1 :(得分:2)

用于存储int32 / int64等值。您可以将标量直接保存在表中。

但是在您的情况下,您有一个间接寻址,可以通过平面缓冲区中非标量创建的间接转移来模仿。

非标量是结构,数组和表。

所以您可以尝试:

Struct IntPtr 
{ 
val:int64
} 

Table Expiration 
{ 
ExpirationDate:IntPtr; 
}