Android开发高手课
张绍文
前微信高级工程师,Tinker负责人
立即订阅
12609 人已学习
课程目录
已完结 61 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 焦虑的移动开发者该如何破局?
免费
导读 (1讲)
导读 | 如何打造高质量的应用?
模块一 高质量开发 (25讲)
01 | 崩溃优化(上):关于“崩溃”那些事儿
02 | 崩溃优化(下):应用崩溃了,你应该如何去分析?
03 | 内存优化(上):4GB内存时代,再谈内存优化
04 | 内存优化(下):内存优化这件事,应该从哪里着手?
05 | 卡顿优化(上):你要掌握的卡顿分析方法
06 | 卡顿优化(下):如何监控应用卡顿?
06补充篇 | 卡顿优化:卡顿现场与卡顿分析
07 | 启动优化(上):从启动过程看启动速度优化
08 | 启动优化(下):优化启动速度的进阶方法
09 | I/O优化(上):开发工程师必备的I/O优化知识
10 | I/O优化(中):不同I/O方式的使用场景是什么?
11 | I/O优化(下):如何监控线上I/O操作?
12 | 存储优化(上):常见的数据存储方法有哪些?
13 | 存储优化(中):如何优化数据存储?
14 | 存储优化(下):数据库SQLite的使用和优化
15 | 网络优化(上):移动开发工程师必备的网络优化知识
16 | 网络优化(中):复杂多变的移动网络该如何优化?
17 | 网络优化(下):大数据下网络该如何监控?
18 | 耗电优化(上):从电量优化的演进看耗电分析
19 | 耗电优化(下):耗电的优化方法与线上监控
20 | UI 优化(上):UI 渲染的几个关键概念
21 | UI 优化(下):如何优化 UI 渲染?
22 | 包体积优化(上):如何减少安装包大小?
23 | 包体积优化(下):资源优化的进阶实践
24 | 想成为Android高手,你需要先搞定这三个问题
模块二 高效开发 (9讲)
25 | 如何提升组织与个人的研发效能?
26 | 关于编译,你需要了解什么?
27 | 编译插桩的三种方法:AspectJ、ASM、ReDex
28 | 大数据与AI,如何高效地测试?
29 | 从每月到每天,如何给版本发布提速?
30 | 数据评估(上):如何实现高可用的上报组件?
31 | 数据评估(下):什么是大数据平台?
32 | 线上疑难问题该如何排查和跟踪?
33 | 做一名有高度的移动开发工程师
模块三 架构演进 (9讲)
34 | 聊聊重构:优秀的架构都是演进而来的
35 | Native Hook 技术,天使还是魔鬼?
36 | 跨平台开发的现状与应用
37 | 移动开发新大陆:工作三年半,移动开发转型手游开发
38 | 移动开发新大陆:Android音视频开发
39 | 移动开发新大陆: 边缘智能计算的趋势
40 | 动态化实践,如何选择适合自己的方案?
41 | 聊聊Flutter,面对层出不穷的新技术该如何跟进?
42 | Android开发高手课学习心得
练习Sample跑起来 (8讲)
练习Sample跑起来 | 热点问题答疑第1期
练习Sample跑起来 | 热点问题答疑第2期
练习Sample跑起来 | 热点问题答疑第3期
练习Sample跑起来 | 热点问题答疑第4期
练习Sample跑起来 | ASM插桩强化练习
练习Sample跑起来 | 唯鹿同学的练习手记 第1辑
练习Sample跑起来 | 唯鹿同学的练习手记 第2辑
练习Sample跑起来 | 唯鹿同学的练习手记 第3辑
特别放送 (7讲)
Android JVM TI机制详解(内含福利彩蛋)
专栏学得苦?可能是方法没找对
专栏学得苦?可能你还需要一份配套学习书单
Native下如何获取调用栈?
聊聊Framework的学习方法
Android工程师的“面试指南”
程序员修炼之路 | 设计能力的提升途径
结束语 (1讲)
结束语 | 移动开发的今天和明天
Android开发高手课
登录|注册

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

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

对象的序列化

应用程序中的对象存储在内存中,如果我们想把对象存储下来或者在网络上传输,这个时候就需要用到对象的序列化和反序列化。
对象序列化就是把一个 Object 对象所有的信息表示成一个字节序列,这包括 Class 信息、继承关系信息、访问权限、变量类型以及数值信息等。
1. Serializable
Serializable 是 Java 原生的序列化机制,在 Android 中也有被广泛使用。我们可以通过 Serializable 将对象持久化存储,也可以通过 Bundle 传递 Serializable 的序列化数据。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Android开发高手课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(12)

  • HS WANG
    对象序列化get到Serial
    2019-01-10
    4
  • Sharry
    Serial 挺好, 不过无法满足 Bundle 传值的操作...
    2019-06-28
    2
  • lbj
    求指导,我自己试了下,本身一个class文件2k,序列化落盘之后只有0.2k,这个好像没有比之前的class文件更大,这个是我自己整的有问题吗
    2019-11-23
    1
  • null
    老师,想问下 Object 用 SharedPreferences 存储,是 Serializable 序列化好一点,还是转成 json 存储好一点呢,按文章所说 json更快 体积也更小是吗

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

    2019-01-11
    1
  • 欢乐de羊
    请问老师会讲下android 文件系统case insensitive相关知识吗?
    2019-01-10
    1
  • wingjay
    咨询一下老师,对文中提到的 “支持随机读写的存储模块,无论存储数量多少,初始化耗时都只需要1ms”比较感兴趣,可以说说具体是怎么做的吗,或者有相关资料吗?谢谢!
    2019-09-27
  • 大土豆
    对于应用内没有非持久化的需求的话,比如说IM没有一种格式,protobuf这种通用的格式也并不是一个好的做法,微信IM消息的私有二进制协议肯定也不是protobuf格式的。倒是微信朋友圈表结构的lvbuffer字段可以参考下,第2-4个字节是一个int型的数据比如说aId,第4-8个字节又是另一个数据,比如说bId。第9到第200字节是字符串内容,长度是多少呢,先读取2个字节的长度,第9到第10字节是这段字符串的长度,长度为190个字节,然后读第11到第200字节,就是字符串的内容。这样定死掉的私有格式,比protobuf好太多,protobuf为了协议的扩展和完备性,又是key-value对应,每个存储还得有一个字节指定type,是定长存储还是变长存储,浪费空间。
    2019-05-04
  • Dimple
    我们现在用websocket进行通信, 用的就是protobuf,数据存储安全高效,消息收发效率也有提升
    2019-04-01
  • Weikaizhi
    老师你好,讲的很精彩,如果能理论和实践相结合就更好了
    2019-01-19
  • 坚持远方
    对象序列化使用的是Parcelable,只知道他的性能比Serializable要好,但是细节并不是特别清楚,数据序列化一直用的json,而且中间CTO推广过Protocol buffer,但是因为使用成本比较高,后来就没有使用,感觉跟着学习,每天都有很多的收获,甚至了解很多自己不知道的东西,太棒了
    2019-01-10
  • Andy
    各位大佬,我有一个问题:Protocol Buffers这个协议现在已经有不只一个版本了,这几个版本之间会不会有兼容性问题?

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

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

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

    2019-01-10
收起评论
12
返回
顶部