7.FlatBuffers的初步体验

作者: android_赵乐玮 | 来源:发表于2017-03-27 20:41 被阅读0次

一、为什么要用Google FlatBuffers

与Protocol Buffers相比,尽管FlatBuffers在空间使用上不具有优势,但是反序列化上的性能非常彪悍!
这得益于FlatBuffers不需要打包/解包。它的结构化数据都以二进制形式保存,不需要数据解析过程,所以性能非常好。

二、编写Schema脚本(.fb/.fbs)

//示例
目标数据格式

TestObj

int code
list<Student> student

int student_id
String name

//脚本:

namespace TestApp;
table Student{
student_id:int;
name:string;
}
table TestObj {
 code:int;
 list:[Student];
}
root_type TestObj;

三、编译Model

下载flatc.exe文件:https://github.com/google/flatbuffers/releases
之后执行命令: flatc -j -b ./Items.fb 生成java Model

*解释:
-j 目标语言为java(生成.java文件)
-c:生成.h文件
-b:二进制文件 *'

//示例
flatc -j -b ./Students.fb

生成:TestObj.java 和 Student.java两个类

四、序列化

FlatBufferBuilder builder = new FlatBufferBuilder();
int id1 = builder.createString("zlw1"); //获取字符串的偏移量(指针)
//开始造人
int studentID1 = Student.createStudent(builder, 1, id1);
int studentID2 = Student.createStudent(builder, 2, builder.createString("zlw2"));
int studentID3 = Student.createStudent(builder, 3, builder.createString("zlw3")); 
//封装集合
int[] list = {studentID1, studentID2, studentID3}; //封装类中的数据指针的集合(同json的datas)
int listID = TestObj.createListVector(builder, list);//封装成封装类
TestObj.startTestObj(builder);
TestObj.addList(builder, listID);
int rootID = TestObj.endTestObj(builder);
TestObj.finishTestObjBuffer(builder, rootID);
ByteBuffer data = builder.dataBuffer();
Log.i("zlw", "序列化完成");

五、反序列化

TestObj obj = TestObj.getRootAsTestObj(data);
for (int i = 0; i < obj.listLength(); i++) {
    Student s = obj.list(i);
    Log.i("zlw", "学生" + i + ":姓名:" + s.name());
}

相关文章

  • 7.FlatBuffers的初步体验

    一、为什么要用Google FlatBuffers 与Protocol Buffers相比,尽管FlatBuffe...

  • IndexR初步体验

    IndexR根据网上手册,已经基本完成安装,做了基本的验证,对其有了初步的认识,从官网摘抄了些,加上点自己的东西,...

  • Weex 初步体验

    阿里推出的类似React Native和Native Script的从前端都mobile的解决方案,主要研究如何将...

  • 抖音、快手竞品分析报告

    一、产品初步体验介绍 体验环境:Redmi Note5A 体验时间:2018.7.16 体验人:Cinnamon ...

  • Django的初步体验(三)

    接下来是html模板的使用,本人也只对html略知一点点,说的不好的地方请见谅。 我乘urls.py为url捕获器...

  • Django的初步体验(一)

    记录使用Django使用过程 防止以后忘记 首先安装Django 如果要从先前版本升级Django的安装,则需要先...

  • Django的初步体验(二)

    接着上次的项目继续,首先需要运行python manage.py migrate,该命令会在数据库文件中创建些基本...

  • Data Binding初步体验

    前言 Data Binding,就是数据绑定的意思。Data Binding 在布局文件中实现数据绑定声明,使数据...

  • 检视阅读初步体验

    声明:如下内容来自于易仁永澄老师发起的《好好读书》共读活动 春节期间参加易仁永澄老师组织的《好好学习》读书活动,第...

  • Android开发初体验

    Android开发初体验 目的 初步了解Android studio的用法,体验安卓开发中菜单动画(平移)。 技术...

网友评论

    本文标题:7.FlatBuffers的初步体验

    本文链接:https://www.haomeiwen.com/subject/lsefottx.html