在进程或页面通信时需要使用Intent传递数据; 在对象持久化时需要存储数据. 对于复杂的对象, 进行序列化才可传递或存储, 可以使用Java的Serializable
方式或Android的Parcelable
方式. 本文介绍Serializable和Parcelable的使用方式, 含有Demo.
更多: http://www.wangchenlong.org/
欢迎Follow我的GitHub: https://github.com/SpikeKing
本文源码的GitHub下载地址
Serializable
序列化User类, 实现Serializable
接口即可. 注意serialVersionUID用于辅助序列化与反序列化, 只有相同时, 才会正常进行. 如不指定, 则系统会自动生成Hash值, 修改类代码, 可能会导致无法反序列化, 所以强制指定.
1 | public class UserSerializable implements Serializable { |
序列化对象, 使用ObjectOutputStream
存储已经序列化的对象数据, 通过writeObject
写入对象.
1 | public void serialIn(View view) { |
缓存文件位置:
new File(context.getCacheDir(), "cache.txt")
.
反序列对象, 使用ObjectInputStream
反序列化对象, 通过readObject
读取对象的持久化信息.
1 | public void serialOut(View view) { |
Parcelable
Android推荐的序列化对象方式. 实现Parcelable
接口, writeToParcel
写入对象的变量, UserParcelable
提供解析对象方式. CREATOR
是创建序列化对象的匿名类, 必须实现, 包含创建单个对象与数组的方式. describeContents
只有在含有文件描述符是返回1, 默认都是返回0, 不需要修改.
1 | public class UserParcelable implements Parcelable { |
使用Intent传递对象数据, 编号0, 姓名Spike, 性别女, 喜欢书籍三国演义.
1 | public void parcelSend(View view) { |
解析广播Intent的数据, 使用getParcelableExtra
方法即可.
1 | private BroadcastReceiver mParcelReceiver = new BroadcastReceiver() { |
效果
Serializable序列化需要大量的IO操作, Parcelable序列化虽然使用复杂, 但是效率很高, 是Android开发的首选. Parcelable主要应用于内存序列化, 如Intent广播等.
OK, that’s all! Enjoy it!
最初发布地址:
http://www.wangchenlong.org/2016/05/07/1605/072-serial-object/
欢迎Follow我的GitHub, 关注我的简书, CSDN, 掘金.
我已委托“维权骑士”为我的文章进行维权行动. 未经授权, 禁止转载, 授权或合作请留言.