导航:首页 > 编程语言 > flatbuffersjson

flatbuffersjson

发布时间:2025-02-18 15:35:40

㈠ android 怎么使用flatbuffers

在Android应用程序中使用Flatbuffers的最简单方法:

JSON数据在应用程序之外的某个地方被转换成FlatBuffer格式的文件(例如,将二进制数据以文件的形式提交,还可以从API直接返回FlatBuffer二进制文件)。
在flatc (FlatBuffer编译器)的帮助下,手工生成数据模型(Java类)。
JSON文件存在一定的局限性(不能使用null字段,日期格式也被解析为字符串)。

将来,我们或许会提出更复杂的解决方案。
FlatBuffers编译器
首先,我们需要flatc,即flatbuffers编译器。该编译器可以从Google所属的源代码构建,源代码位于Flatbuffers资源库中。我们下载并克隆它。整个构建过程在FlatBuffers构建文档中都做了描述。如果你是Mac用户的话,需要这样来构建:

在\{extract directory}\build\XcodeFlatBuffers.xcodeproj路径下,打开已下载的源代码。
点击Play按钮或⌘ + R,运行flatc scheme(默认情况下应该是被选中的)。
flatc可执行文件就会在项目的根目录下出现。

现在,我们可以使用schema编译器了,该编译器能够把给定的schema(在Java、C#、Python、GO和C++语言中的schema)生成为模型类,还可以把JSON转换成Flatbuffer的二进制文件。
Schema文件
接着,我们必须准备schema文件,该文件定义了要进行序列化和反序列化的数据结构。这个schema将用于flatc创建Java模型,把JSON转换成FlatBuffers的二进制文件。

安卓开发 FlatBuffers能够替代JSON 吗

FlatBuffers vs JSON

你也许会问:既然我们已经有了标准的JSON、GSON和Jackson,为何还要使用新的工具呢?

你不妨试试FlatBuffers,你就会发它们比JSON快多了。

FlatBuffers是什么?

FlatBuffers是一个跨平台标准化的C++、C#、C、Go、Java、JavaScript、PHP和Python库。它们最早由谷歌创立,用来开发游戏和其他一些需要高性能的程序。

为什么使用latBuffers?
无需分解/拆包就能使用序列化数据——FlatBuffers最大的特点,就是它可以在二进制文件缓冲区内代表分层数据,也就是说,在无需分解和拆包的情况下,它们就可以被使用,而且同时支持数据架构演变(支持向前和向后)。

内存效率与速度——获取数据所需的唯一内存,就是缓冲内存。它不需要任何额外的内存分配(至少在C++中不需要。其它语言可能会有所不同)。
FlatBuffers还适用于mmap,内存只需要缓冲的一部分。数据使用的速度接近原架构,只需要一个额外的间接引用来允许格式演化和非强制性字段。
FlatBuffers瞄准的是那些消耗大量时间和空间(许多许多的内存分配)的项目,它让这些项目可以使用或架构那些不受欢迎的序列号数据,例如
FlatBuffers可以运用在游戏,或是其他需要消耗性能的应用中。

灵活性——拥有非强制性字段意味着你不仅可以获得优秀的前进和后退能力(在游戏中非常重要,你无需再每一个新版本中对所有数据都进行更新),还意味着你在数据写入和放弃方面,你拥有了更多的选择,在设计数据结构上面,你也有更多的选择。

对代码数量需求低——FlatBuffers只需要很少的代码,以及非常易于真核的单一小标题作为最小依赖。

编写简单——在使用的时候,错误在编写阶段就能体现出来,而不需要你进行反复的代码编写,也不需要进行运行时检查。它还会为你生成一些有用的代码。

使用方便——它所生成的C++代码便于访问,可用在结构代码中。它还有一个用于分解纲要的可选功能,以及类似JSON的文本表达功能,可以在运行时有效运转(相比JSON分解器速度更快,对内存的使用率也更高)。

跨平台,无依赖——C++代码可以兼容任何最近的gcc/clang和VS2010。它还内置了一个用于测试和样品的构建文件(安卓.mk文件,以及支持所有其他平台的cmake文件)。

是谁在使用FlatBuffers
BobbleApp是印度最受欢迎的表情贴纸应用。他们在使用FlatBuffers的过程中,大幅的提升了应用的性能。Cocos2d-x是排名第一的开源移动游戏引擎,他们也在使用Cocos2d-x来将游戏数据进行序列化处理。
Facebook也在使用FlatBuffers,他们用它来构建安卓应用中的客户服务沟通功能。他们曾经发布了一篇文章,讲述FlatBuffers对他们的帮助。

谷歌的Fun Propulsion Labs使用FlatBuffers在库和游戏的开发中大量使用FlatBuffers。

应用性能有多大的提升?

分解速度方面,在JSON上处理20KB的数据需要35毫秒,超过了UI框架刷新的间隔(16.6毫秒)。在使用JSON的时候,我们无法给用户带来顺滑的应用体验,他们在滚动UI的时候,会感到明显的延迟。

分解初始化方面。JSON的分解器需要在分解前构建field mapping,通常需要100-200毫秒。这会大大延长应用的启动时间。

垃圾收集方面,在JSON进行分解的过程中,会产生大量小对象,我们发现,当JSON对20KB的数据进行分解的时候,需要为其指派100KB的内存空间,这个Java的垃圾收集器造成了巨大的压力。
FlatBuffer vs JSON

曾经做过这样的实验,分别用FlatBuffer和JSON对4mb的文件进行分解,FlatBuffer需要1-5毫秒,而JSON需要2000毫秒。
在使用FlatBuffer的时候,应用无需调用GC;而在使用JSON的时候,GC需要被调用多次。因此,在使用JSON的时候,应用UI冻结,我只能
选在在背景中让JSON完成分解。

阅读全文

与flatbuffersjson相关的资料

热点内容
怎样变换文件存储格式 浏览:208
飞常准的数据来自哪里 浏览:844
ug100如何编程画线 浏览:870
文件夹999找不到 浏览:145
win1014393最新版本号 浏览:100
java基本类型大小 浏览:516
word2007不能插入页码 浏览:968
vb读取文件并判断 浏览:6
php图片和程序分离 浏览:412
安卓面试非计算机专业 浏览:228
u盘的光盘文件怎么驱动 浏览:34
如何锁定c盘不下文件 浏览:359
浙江推广网站建设怎么做 浏览:478
word文件只有10页怎么增加 浏览:921
itunes下载的系统在哪个文件夹 浏览:605
个性化linux全名要求 浏览:40
数据表格制图小红点如何去掉 浏览:244
查询iphone版本信息失败怎么办 浏览:978
电脑版微信下载的文件保存在哪里 浏览:367
linuxsocket转发 浏览:32

友情链接