1. 从github上将其签下: https://github.com/google/flatbuffers/archive/master.zip
2. 编译, 用的是cmake.
好像不能识别环境变量, 得手动改一下CMAKE_CXX_COMPILER/CMAKE_C_COMPILER, 默认是c++和c. 感觉还真不如make方便.
3. 编写fbs, 非常简单.
namespace cn;
table Monster {
pos:string;
name:string;
ret:int;
}
root_type Monster;
另存为moster.fbs
4. 生成java源文件, 运行下面的命令, 就会生成一个cn文件夹, 其中有一个Monster.java.
[root@xzw bin]# flatc -j monster.fbs
5. 消息构造, 在编程方式上非常奇怪, 完全没有protobuf方便.
public static void main(String[] args)
{
FlatBufferBuilder fbb = new FlatBufferBuilder(1);
int ofst0 = fbb.createString("jack");
int ofst1 = fbb.createString("10.10");
{
Monster.startMonster(fbb);
Monster.addName(fbb, ofst0);
Monster.addPos(fbb, ofst1);
Monster.addRet(fbb, 0x11223344);
Monster.finishMonsterBuffer(fbb, Monster.endMonster(fbb));
}
Monster m = Monster.getRootAsMonster(fbb.dataBuffer());
Misc.printf(fbb.dataBuffer().array());
Misc.printf("name: %s, pos: %s, ret: %08X\n", m.name(), m.pos(), m.ret());
}
6. 运行结果, 很明显, 序列化的二进制体积上要比protobuf大得多, 当然这个消息的内容本身比较小, 所以与内容无关的东西占的比重更大.
7. 其它, 生成的代码量非常小, c++代码只有一个头文件. 编译起来相信要比protobuf快得多, 感觉flatbuffer还比较骨感, 不知道咋转成json, xml等.
也没有eclipse插件, 相信编写起来不会太舒服.