为何 Android 开发者在逐渐用 FlatBuffers 替代 JSON
一、FlatBuffers是什么?
兄弟连教育www.lampbrother.net,FlatBuffers是一个高效的跨平台序列化类库,可以在C++、C#、C、Go、Java、JavaScript、PHP和Python中使用。是Google开发的,是为了应用在游戏开发,以及其他注重性能的应用上。
二、为什么要使用FlatBuffers?
不需要转义/拆包就可以访问序列化数据 — FlatBuffers与其他库不同之处就在于它使用二进制缓冲文件来表示层次数据,这样它们就可以被直接访问而不需转义与拆包,同时还支持数据结构进化(前进、后退兼容性)。
内存高效速度快 — 访问数据时只需要访问内存中的缓冲区。它不需要多余的内存分配(至少在C++是这样,其他语言中可能会有变动)。FlatBuffers还适合配合mmap或数据流使用,只需要缓冲区的一部分存储在内存中。访问时速度接近原结构访问,只有一点延迟(一种虚函数表vtable),是为了允许格式升级以及可选字段。FlatBuffers适合那些花费了大量时间和空间(内存分配)来访问和构建序列化数据的项目,比如游戏以及其他对表现敏感的应用。可以参考这里的基准。
灵活 — 由于有可选字段,你不但有很强的升级和回退兼容性(对于历史悠久的游戏尤其重要,不用为了每个版本升级所有数据),在选择要存储哪些数据以及设计数据结构时也很自由。
轻量的code footprint — FlatBuffers只需要很少量的生成代码,以及一个表示最小依赖的很小的头文件,很容易集成。细节上可以看上面的基准页。
强类型 — 编译时报错,而不需要自己写重复的容易出错的运行时检查。它可以自动生成有用的代码。
使用方便 — 生成的C++代码允许精简访问与构建代码。还有可选的用于实现图表转义、类似JSON的运行时字符串展示等功能的方法。(后者比JSON转义库更快,内存效率更高)
代码跨平台且没有依赖 — C++代码可以运行在任何近代的gcc/clang和VS2010上。同时还有用于测试和范例的构建文件(Android中.mk文件,其他平台是cmake文件)。
三、都有谁使用FlatBuffers?
兄弟连教育www.lampbrother.net 来带大家看看他们使用FlatBuffers的反馈:
BobbleApp,印度第一贴图App。我们在BobbleApp中使用FlatBuffers后App的性能明显增强。
Cocos2d-x,第一开源移动游戏引擎,使用FlatBuffers来序列化所有的游戏数据。
Facebook使用FlatBuffers在Android App中进行客户端服务端的沟通。他们写了一篇文章来描述FlatBuffers是如何加速加载内容的。
Google的Fun Propulsion Labs在他们所有的库和游戏中大量使用FlatBuffers。
四、App性能有多大提高?
转义速度 转义一个20KB的JSON流(这差不多是BobbleApp的返回大小)需要35ms,超过了UI刷新间隔也就是16.6ms。如果转义JSON的话,我们就在滑动时就会因为要从磁盘加载缓存而导致掉帧(视觉上的卡顿)。
转义器初始化 一个JSON转义器需要先构建字段映射再进行转义,这会花100ms到200ms,很明显的拖缓App启动时间。
垃圾回收 在转义JSON时创建了很多小对象,在我们的试验中,转义20kb的JSON流时,要分配大约100kb的瞬时存储,对Java内存回收造成很大压力。
五、FlatBuffers vs JSON
兄弟连小编尝试使用FlatBuffers和JSON转义4mb的JSON文件。
FlatBuffers花了1-5ms,JSON花了大约2000ms。在使用FlatBuffers期间 Android App中没有GC,而在使用JSON时发生了很多次GC。在使用JSON时UI完全卡住,所以真实使用时只能在后台线程进行转义。
分享到:
相关推荐
Android开发者资料大全
在Android开发中,为了提升应用中的动画效果和性能,开发者经常使用Adobe After Effects(简称AE)来设计复杂的视觉效果,并将其导出为JSON文件。这种做法可以借助Lottie-Android库,让Android应用能够轻松地读取并...
总的来说,Google Gson库在Android Studio中为开发者提供了一个强大且易于使用的工具,用于处理JSON数据。它能够有效地将JSON字符串转化为Java对象,以及将Java对象序列化为JSON字符串,极大地简化了数据操作的工作...
"Android-okhttp-json-mock"是一个专门为OkHttp和Retrofit设计的测试工具,它允许开发者在本地模拟返回json格式的网络数据,极大地提高了开发和测试的效率。这个工具的核心功能在于,它能够拦截OkHttp的网络请求,并...
在Android开发中,Android Studio是官方推荐的集成开发环境(IDE),它提供了强大的工具和功能,使得开发者可以高效地创建Android应用。在这个场景中,我们将探讨如何在Android Studio中解析JSON数组,并将获取的...
在Java中,我们可以使用`org.json`库或者Gson库将Map转换为JSON字符串。这个工具类可能包含以下方法: ```java public static String mapToJsonString(Map, Object> map) { // 使用Gson库进行转换 Gson gson = ...
最后,开发者还需要了解和使用Android Debug Bridge(ADB),这是一个命令行工具,可以用于调试设备、安装应用、查看设备状态等。它连接了开发者电脑与Android设备,是开发过程中不可或缺的一部分。 总的来说,...
《Android中文API合集(7)》与《Android开发者指南(2)》是两本针对Android开发者的宝贵资源,它们以CHM(Compiled Help Manual)格式提供,方便开发者离线查阅。下面将对这两个资源中的关键知识点进行详细的阐述...
在Android中,我们可以使用内置的`org.json`库解析JSON字符串。解析后的数据可以转化为`JSONObject`和`JSONArray`对象,便于进一步操作。为了展示JSON数据,我们需要创建一个自定义的布局来呈现键值对,并根据需要...
- 对于简单的JSON解析,可以使用Android SDK内置的`org.json`库。 - 对于大量数据或性能敏感的应用,推荐使用Gson或其他高性能库。 - 性能优化时,考虑使用流式解析(Streaming API)以减少内存消耗。 - 使用try-...
在Android中,我们通常使用两种主要方法来解析JSON数据:Gson库和org.json库。Gson是Google提供的一个Java库,它可以将Java对象转换为JSON字符串,也可以将JSON字符串反序列化为等效的Java对象。而org.json库则是一...
在Android开发中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于应用程序与服务器之间的数据传输。这个“android demo”显然是一个展示如何在Android平台上处理JSON数据、发送JSON字符串...
JsonView是一款针对Android平台设计的高效Json解析和可视化工具,它为开发者提供了一种直观的方式来查看和理解Json数据。在Android应用开发过程中,处理Json数据是常见的任务,而JsonView通过其友好的界面和强大的...
开发者在进行前后端交互或者处理API响应时,经常会遇到解析JSON的需求。本文将详细介绍JSON解析工具及其在开发中的应用。 在开发过程中,理解和解析JSON数据是至关重要的。"开发者json解析工具"正如其标题所示,是...
本教程将深入讲解如何在Android中对JSON数据进行封装和解析,以便于在应用程序中有效使用。 一、JSON基础知识 JSON是一种独立于语言的数据表示格式,它基于ECMAScript的一个子集。一个基本的JSON对象由键值对组成,...
在“Android解析json速度对比”的测试中,我们通常会设置一个标准的JSON数据集,然后使用这三个库进行反序列化操作,并记录每种库所花费的时间。测试方法可能包括以下步骤: 1. **数据准备**:创建一个包含大量键值...
标题中的“Node.js-用于将XML转换为JSON和JSON到XML的Android库”指的是一个针对Android平台的开发库,该库允许开发者在Android应用中进行XML与JSON之间的转换。XML(Extensible Markup Language)是一种结构化数据...
处理JSON响应时,可以使用Gson库,这是谷歌提供的一个广泛使用的库,用于在Java对象和JSON数据之间进行转换。首先需要将Gson库添加到项目依赖中: dependencies { implementation '...
在Android应用开发中,与服务器进行数据交互是常见的需求,其中JSON作为一种轻量级的数据交换格式,被广泛用于客户端和服务器之间的通信。本教程将详细讲解如何在Android中获取通过HTTP协议传输的JSON数据,以及如何...
在Android开发中,JSON(JavaScript Object Notation)是一种广泛使用的轻量级数据交换格式,它易于人阅读和编写,同时也方便机器解析和生成。当应用需要与服务器进行数据交互时,JSON是常见的数据传输格式。Android...