Android 开发高手课
张绍文
前微信高级工程师,Tinker 负责人
52721 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 62 讲
导读 (1讲)
模块一 高质量开发 (25讲)
Android 开发高手课
15
15
1.0x
00:00/00:00
登录|注册

13 | 存储优化(中):如何优化数据存储?

优缺点
自研的JSON方案
优势
注意事项
永久存储
注意事项
进阶用法
原理
ROM监控
性能监控
Protocol Buffers
JSON
Serial
Parcelable
Serializable
课后作业
总结
存储监控
数据的序列化
对象的序列化
数据存储的六个关键要素
数据存储的定义
如何优化数据存储

该思维导图由 AI 生成,仅供参考

“将特定结构的数据转化为另一种能被记录和还原的格式”,这是我在上一期对存储下的一个定义。
再来复习一下数据存储的六个关键要素:正确性、时间开销、空间开销、安全、开发成本和兼容性。我们不可能同时把所有要素都做到最好,所谓数据存储优化就是根据自己的使用场景去把其中的一项或者几项做到最好。
更宽泛来讲,我认为数据存储不一定就是将数据存放到磁盘中,比如放到内存中、通过网络传输也可以算是存储的一种形式。或者我们也可以把这个过程叫作对象或者数据的序列化。
对于大部分的开发者来说,我们不一定有精力去“创造”一种数据序列化的格式,所以我今天主要来讲讲 Android 常用的序列化方法如何进行选择。

对象的序列化

应用程序中的对象存储在内存中,如果我们想把对象存储下来或者在网络上传输,这个时候就需要用到对象的序列化和反序列化。
对象序列化就是把一个 Object 对象所有的信息表示成一个字节序列,这包括 Class 信息、继承关系信息、访问权限、变量类型以及数值信息等。
1. Serializable
Serializable 是 Java 原生的序列化机制,在 Android 中也有被广泛使用。我们可以通过 Serializable 将对象持久化存储,也可以通过 Bundle 传递 Serializable 的序列化数据。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了Android中常用的序列化方法,重点讨论了Serializable、Parcelable和Serial等不同序列化方式的性能和特点。首先介绍了对象的序列化,包括Serializable和Parcelable两种常用的序列化方式,以及它们在Android中的应用和注意事项。接着介绍了Twitter开源的高性能序列化方案Serial,强调了其高效、强大的控制能力和版本管理能力等优势。此外,文章还对比了JSON和Protocol Buffers等数据序列化方案的优缺点,以及在不同数据量情况下的性能表现。最后,文章提到了存储监控的重要性,包括性能监控和ROM监控,并强调了对存储问题的快速发现和解决的重要性。总的来说,本文通过对比不同序列化方式的性能和特点,为读者提供了选择合适序列化方法和优化存储的参考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Android 开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(13)

  • 最新
  • 精选
  • null
    老师,想问下 Object 用 SharedPreferences 存储,是 Serializable 序列化好一点,还是转成 json 存储好一点呢,按文章所说 json更快 体积也更小是吗

    作者回复: 需要考虑你们内部的开发成本,sp的结构性查询会更好一些

    2019-01-11
    2
  • scofield
    张老师,能结合一些代码吗,感觉光这些理论,真正吸收的内容很少很少,谢谢

    作者回复: 这块在网上的例子有很多

    2019-01-10
    1
  • CoderAndy
    各位大佬,我有一个问题:Protocol Buffers这个协议现在已经有不只一个版本了,这几个版本之间会不会有兼容性问题?

    作者回复: 一般本地都会打进去一个版本的,而且也会考虑前后兼容

    2019-01-10
  • 欢乐小熊
    Serial 挺好, 不过无法满足 Bundle 传值的操作...
    2019-06-28
    6
  • Badwritten
    对象序列化get到Serial
    2019-01-10
    5
  • lbj
    求指导,我自己试了下,本身一个class文件2k,序列化落盘之后只有0.2k,这个好像没有比之前的class文件更大,这个是我自己整的有问题吗
    2019-11-23
    1
    4
  • 哄哄
    老师你好,"我们内部另外一个支持随机读写的存储模块,初始化时间并不会因为存储条数的数量而变化,即使有几万条数据,初始化时间也在 1ms 以内。"这个存储模块可以具体说说怎么实现的吗?
    2022-04-08
    2
  • 程序员小跃
    我们现在用websocket进行通信, 用的就是protobuf,数据存储安全高效,消息收发效率也有提升
    2019-04-01
    1
    1
  • 一把紫茶壶
    请问老师会讲下android 文件系统case insensitive相关知识吗?
    2019-01-10
    1
  • Geek_1094cb
    数据序列号用的是JSON,我做的是TV里面的Launcher,因为我们的布局都是通过JSON解析后展示的,所以在启动的时候需要解析JSON文件,然后会出现一个问题就是开机的时候多个应用竞争资源,导致JSON解析时间非常不稳定,正常解析700MS,但开机要要十几秒。后面对JSON文件进行分割,分割为十几个JSON,然后一开始只解析1个框架JSON,开机解析时间到200ms,正常时间100ms。所以数据的持久化需要考虑的还是很多的。
    2020-04-21
收起评论
显示
设置
留言
13
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部