导航:首页 > 编程语言 > 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相关的资料

热点内容
苏州租房网站哪个好 浏览:622
共享文件不刷新 浏览:747
怎样设置苹果4书写板 浏览:227
dnf90版本图片 浏览:935
网络促销方案的实施 浏览:466
新时代如何做好网站管理 浏览:274
猎码编程什么意思 浏览:456
网络词军犬什么意思 浏览:621
小学生初步学英语下载什么APp 浏览:293
修真的程序员 浏览:844
验证网站怎么操作 浏览:928
oppo云服务备份数据在哪里 浏览:255
遍历zip文件内文件内容 浏览:660
gpb9文件 浏览:333
微信编辑软件合法吗 浏览:421
miniuijs隐藏列 浏览:371
大风车app上如何进行拍车 浏览:941
文件夹的长是多少厘米 浏览:46
天下三人物升级快 浏览:371
电脑覆盖文件路径 浏览:716

友情链接