您的位置:首页 > 移动开发 > Android开发

浅谈serializable和parcelable

2016-09-03 13:08 281 查看
serializable接口

parcelable接口

serializable接口

serializable是Java所提供的一个序列号接口。它是一个空接口,为对象提供标准的序列号和反序列化操作。

serializable接口的实现步骤

-将这个类实现serializable接口

-在该类中实现如下声明:

private static final long serialVersionUID = 8711368828010083044L

-接下来利用ObjectOutputStream和ObjectInputStream即可实现对象的序列号和反序列化操作。

注意:serialVersionUID也不是必需的,不声明它也同样可以实现序列号,但是会对反序列化过程产生影响。

parcelable接口

Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据,而Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable,因为android不同版本Parcelable可能不同,所以不推荐使用Parcelable进行数据持久化

Serializable的作用是为了保存对象的属性到本地文件、数据库、网络流、rmi以方便数据传输,当然这种传输可以是程序内的也可以是两个程序间的。而Android的Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据而设计,这些数据仅在内存中存在,Parcelable是通过IBinder通信的消息的载体。

对于Serializable,类只需要实现Serializable接口,并提供一个序列化版本id(serialVersionUID)即可。而Parcelable则需要实现writeToParcel、describeContents函数以及静态的CREATOR变量,实际上就是将如何打包和解包的工作自己来定义,而序列化的这些操作完全由底层实现。

Serializable序列化不保存静态变量,可以使用Transient关键字对部分字段不进行序列化,也可以覆盖writeObject、readObject方法以实现序列化过程自定义
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android+ java 序列号