[TOC]

概述

文件结构

基础数据类型

  • 8 bit: byte ubyte bool
  • 16 bit: short ushort
  • 32 bit: int uint float
  • 64 bit: long ulong double

复杂数据类型:

  • 数组 (用中括号表示 [type]). 不支持嵌套数组,可以用 table 实现

  • 字符串 string, 支持 UTF-8 或者 7-bit ASCII. 对于其他编码可以用数组 [byte] 或者 [ubyte] 表示。

  • Struct 只支持基本类型或者嵌套 Struct

  • Table 类似 Struct,但是可以支持任何类型

structs对象

structs 和 table 非常相似,只是 structs 没有任何字段是可选的(所以也没有默认值),字段可能不会被添加或被弃用。结构可能只包含标量或其他结构。如果确定以后不会进行任何更改(如 Vec3 示例中非常明显),请将其用于简单对象。structs 使用的内存少于 table,并且访问速度更快(它们总是以串联方式存储在其父对象中,并且不使用虚拟表)。

structs 不提供前向/后向兼容性,但占用内存更小。对于不太可能改变的非常小的对象(例如坐标对或RGBA颜色)存成 struct 是非常有用的。

编写Scheme文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// 打电话的状态
enum FaceCallStatus:byte { F_CALL_NONE = 0, F_CALL_CALLING}

enum FaceDangerousStatus:byte { F_DANGEROUS_NONE = 0, F_DANGEROUS_SMOKE,F_DANGEROUS_SILENCE,F_DANGEROUS_DRINK,
F_DANGEROUS_OPEN_MOUTH,F_COVER_MOUTH,F_FACE_MASK,F_COVER_NONE

struct VPoint3 {
x:float;
y:float;
z:float;
}

struct VAngle {
yaw:float;
pitch:float;
roll:float;
}

table FaceInfo {
name:string;
index:short;
headLocation:VPoint3;
headDeflection:VAngle;

faceCount:[ubyte] (deprecated);
faceFeature:[float];

stateCallSingle:bool = false;
stateDangerDriveSingle:FaceDangerousStatus = F_DANGEROUS_NONE;
eye3dLandmark28Left:[VPoint3];
eye3dLandmark28Right:[VPoint3];
}

root_type FaceInfo;

编译Scheme文件

1
flatc [ GENERATOR OPTIONS ] [ -o PATH ] [ -I PATH ] [ -S ] FILES… [ – FILES…]

定义文件按照顺序被读取和编译,还可以包含其他定义文件和数据(详情 见下面).
任意个定义文件可能生成一个或者多个定义文件,这取决于附加的命令选项:

  • –cpp,-c :按照定义生成C++头文件
  • –java,-j :按照定义生成Java代码
  • –csharp,-n :按照定义生成C#代码
  • –go,-g :按照定义生成Go代码
  • –python,-p :按照定义生成python打底吗
  • –javascript,-s :按照定义生成JavaScript
  • –php :按照定义生成php
    数据序列化格式选项
  • –binary,-b :序列化成.bin 后缀的二进制格式,
  • –json,-t :序列化成.json 后缀的json格式,
    其他选项
  • -o PATH :输出搜有生成的文件到Path(绝对路径,或者相对于当前目录)路径,如果省略,Path就是当前目录.路径末尾因该是你的系统分隔符\或者/.
  • -I PATH :当遇见include声明,试图读取文件的时候将从此路径按照顺序查找,如果失败,就按照相对路径查找
  • -M :打印Make规则到生成文件
  • –strict-json :要求生成严格的json文件(名字等字段包含在引号中,table和Vector末尾没有逗号),默认 在required/generated时没有引号,末尾逗号是允许的
  • —defaults-json :当输出json文件本的时候输出字段等于默认值
  • —no-prefix :当生成C++头文件时 枚举值不包含枚举类型的前缀
  • —scoped-enums :使用C++11风格作用域和强类型枚举生成C++,也就意味着 –no-prefix
  • —no-includes :不生成包含include模式的代码,(依赖C++)
  • —gen-mutable :为可变的FlatBuffers生成额外的non-const访问器
  • —gen-onefile :生成一个定义文件(用于C#)