孙广东 2015.7.4
http://www.open-open.com/lib/view/open1441004786315.html
虽然FB的反序列化超级快,但是数据大小还是蛮大的(可能的原因是不需要解析,直接访问binary buffer,所以不能对数据进行压缩),带来的传输或存储开销,可能会抵过一部分反序列化的时间。感觉上,FB的使用场景上还是很受限,在移动端可能是一个应用场景。
protocol buffer的作者后来又弄了一个Cap'n Proto ( 但是好像应用场景没有太火 )
http://google.github.io/flatbuffers/flatbuffers_support.html
提供了对 Unity游戏引擎C#的 支持!(本身 FlatBuffers 就是 移动平台移动开发 而出的!)
关于Unity的示例代码 必须要学习啊!!!!!!
http://exiin.com/blog/flatbuffers-for-unity-sample-code/
FlatBuffers 是 Google为游戏和移动应用而开发的开源、跨平台的序列化库。支持 C++, Java, C#, Go, Python and JavaScript等语言。中国有5亿智能手机,其中低端设备占多数,在 CPU 和内存都受限的情况下,能否开发出高性能且低内存占用的 Android程序决定了你的应用的用户覆盖率和留存率。
在Unity使用 FlatBuffers 作为存储格式(移动版)
翻译: http://qiita.com/akerusoft/items/8c10f8a40fee722e6d1b
Unity提供了 PlayerPrefs作为本地的数据存储, 但是速度不是很快!
下面就是一个测试使用 FlatBuffers
Unity 5.3.3f1 版本
FlatBuffers 1.3.0版本
运行在 Android /IOS 测试
FlatBuffers序列化保存为二进制。
还应用在Facebook上。
FlatBuffers,分为 结构定义 (架构) 和 数据
它要在服务器和客户端可用。
使用 FlatBuffers 的流程。
- 结构定义
- 自动生成的相应的 语言(java,C# ,java等)文件
- 序列化/反序列化过程
schema language (aka IDL, Interface DefinitionLanguage)
namespace Data;
file_identifier"MYFI";
unionData
{
MonsterDataV1
}
tableRoot
{
data:Data;
}
tableMonsterDataV1
{
name:string;
hp:uint;
hitRate:float;
speed:uint;
luck:uint;
}
tableMonsterDataV2
{
name:string;
hp:uint;
hitRate:float;
speed:uint;
luck:uint;
defence:uint;
}
root_typeRoot;
来自 <http://qiita.com/akerusoft/items/8c10f8a40fee722e6d1b>
首先是表table MonsterDataV1
这假设是在 rpg 游戏中使用的怪物结构。
表table 字段声明(类型写在 后面)
字段是通过使用 内置类型 进行描述。
除了内置类型,你也可以使用自定义的类型(除了当前table)。
以下是union的数据。
这是种枚举类型,主要特征 以table表作为字段。
在本例中是定义的字段 只有 MonsterDataV1
union 中的所有字段占用同一个内存存储(同一时间也只有一个字段有效)。
如果你也可以添加 MonsterDataV2 字段,但数据也只有一个存储。(听起来像一个 c 语言中的union)
基于这种分析。
"file_identifier"是写在 文件的开头的 文件 ID,您可以使用 4 ASCII 字符 (字节 4-7)。
它是可能要检查服务器发送数据,等等......
升级注意事项
应用程序或游戏,要进行数据升级,当一项新功能被增加到应用程序