java中Serializable与Parcelable的使用
来源:互联网 发布:移动的网络机顶盒 编辑:程序博客网 时间:2024/06/07 05:41
java序列化:保存内存对象的状态,包括对象的属性值,但不包括方法和static变量(因为static修饰的变量是属于类而不隶属于对象),以及用transient关键字修饰的变量(transient是禁止序列化的标识,效果等同于static修饰的变量).
java反序列化:是与java序列化相对的,表示从磁盘或者其他介质中读取序列化对象的内容.
java序列化的应用场景:
- 内存中的对象保存到磁盘文件中
- 网络传输对象,比如Socket套接字传输
- 通过RMI(Remote Method Invoke 远程方法调用)传输对象,如android中的AIDL
java如何实现序列化:
Serializable序列化的空接口,这个序列化很简单,类直接实现就可以了,记住要添加或者保留序列化版本号serialVersionUID,否则可能会造成反序列化失败.
Parcelable接口,android特有的序列化存储,传输效率高,需要实现里面的抽象方式,实现起来比较麻烦.
Serializable
结果分析:transient关键字修饰的members和staice修饰的code并未序列化,因此说明java序列化保存的是除static及transient关键字修饰的成员,需要注意的是上面的Address同样需要实现Serializable,否则会报序列化异常,另外Serializable序列化是可以继承的,即一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口。
注意到上面程序中有一个 serialVersionUID,serialVersionUID是用来辅助序列化和反序列化过程的,原则上序列化后的对象中serialVersionUID只有和当前类的serialVersionUID相同才能够正常被反序列化,也就是说序列化与反序列化的serialVersionUID必须相同才能够使序列化操作成功。具体过程是这样的:序列化操作的时候系统会把当前类的serialVersionUID写入到序列化文件中,当反序列化时系统会去检测文件中的serialVersionUID,判断它是否与当前类的serialVersionUID一致,如果一致就说明序列化类的版本与当前类版本是一样的,可以反序列化成功,否则失败并报出UID错误.
Parcelable
因为Serializable频繁的进行IO操作,在内存序列化上开销比较大,而内存资源对android系统尤其宝贵,因此android提供了Parcelable接口来实现序列化操作,Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如通过Intent在activity间传输数据,而Parcelable的缺点就使用起来比较麻烦。
- java中Serializable与Parcelable的使用
- Serializable和Parcelable的解析与使用
- android中Parcelable和Serializable的使用
- Android中Serializable和Parcelable的使用
- Android Parcelable与Java Serializable
- parcelable与serializable 的区别
- Parcelable及Serializable的使用
- Android中序列化的实现?使用Serializable还是Parcelable
- 浅谈 Parcelable与Serializable的区别
- Serializable与Parcelable的使用方法及区别
- Parcelable与Serializable的性能比较
- Android Parcelable与Serializable的区别
- Android中Parcelable和Serializable的区别
- android中Serializable 和 Parcelable 的区别
- Android中Serializable和Parcelable的对比
- Java中 Serializable的使用
- Parcelable与Serializable
- Parcelable与Serializable
- maven运行项目出现编译环境的错误
- dommemstat
- MySQL修改表
- React虚拟DOM浅析
- css3实现hover特效----案例
- java中Serializable与Parcelable的使用
- 顶住学长20分钟的进攻?刚入学就玩这么大?
- Ubuntu提示E: Sub-process /usr/bin/dpkg returned an error code (1)的解决方法
- 计数排序 -- 算法小结
- java 集合排序
- OpenCV编程->四路摄像头拼接实时显示
- ID3算法
- Android-->build.gradle-->aaptOptions,sourceSets,adbOptions,compileOptions
- 理解矩阵的掩码操作 使用opencv锐化图片