当前位置: 首页 > news >正文

Serializable 和 Parcelable 两种序列化

什么时候用的到序列化?

  1、永久性保存对象,保存对象的字节序列到本地文件中

  2、通过序列化对象在网络中传递对象

  3、通过序列化在进程之间传递对象

在安卓中,可以用作在Activity中传递复杂类型,主要是将自己的类转换为基础的字节数组,Android中Activity传递主要靠Intent这个类,Intent类内部传递数据的效率仍然需要拷贝,如果数据太大,其实可以考虑用单例模式,定义一个全局的静态类,活用设计模式。

Parcelable

  putExtra(String name, Parcelable value)//传递一个parcelable对象 

  putExtra(String name, Parcelable[] value) // 传递一个Parcelable数组

  putExtra(String name, Bundle value) //传递一个Bundle对象

  putParcelableArrayListExtra(String name, ArrayList<? extends Parcelable> value) //传递一个实现Parcelable接口的对象数组

  putStringArrayListExtra(String name, ArrayList<String> value) //传递一个字符串数组

  putIntegerArrayListExtra(String name, ArrayList<Integer> value) //传递一个整形数组。

  Integer这些装箱类型,Intent还实现了 putExtra(String name, int[] value) 这样的基础类型数组,同时Parcelable效率比标准的Java序列化更高,同时还被用作在AIDL中交换数据,所以掌握Parcelable这样的显示序列化技术,可以大幅提高数据交换性能

Serializable

  传统的Java,串行化技术,实现Serializable接口,原理和Parceble差不多,均将自己的类转换为基本的类型比如说字节数组,在Android中不是很实用,比Parcelable效率低,在Intent中使用Intent putExtra(String name, Serializable value) 这个方法即可。

 

区别

  • 在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelable。
  • Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。
  • Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点, 也不提倡用,但在这种情况下,还是建议你用Serializable 。

 

部分来自于http://www.cnblogs.com/blueofsky/archive/2012/01/07/2315664.html、http://www.cnblogs.com/ylligang/articles/2231559.html

转载于:https://www.cnblogs.com/fengbeihong/archive/2012/09/05/2671626.html

相关文章:

  • javax.servlet.ServletException: BeanUtils.populate的解决
  • 文件系统性能测试
  • BIEE在windows Server 2003 64bit上安装
  • android 蓝牙学习笔记
  • [QT] TCP协议演示
  • content_for对应的yield
  • 四十八、Qt网络(八)TCP(二)
  • GetDlgItem用法
  • 四十七、Qt网络(七)TCP(一)
  • 四十六、Qt网络(六)UDP
  • 评估一款电子邮件营销软件的方法总结
  • 四十四、Qt网络(四)FTP(二)
  • DevExpress点滴学习--换肤
  • 四十二、Qt网络(二)HTTP编程
  • 【转贴】Oracle查询重复数据与删除重复记录方法
  • Google 是如何开发 Web 框架的
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • ESLint简单操作
  • HTTP请求重发
  • HTTP--网络协议分层,http历史(二)
  • LeetCode18.四数之和 JavaScript
  • Linux后台研发超实用命令总结
  • Phpstorm怎样批量删除空行?
  • SpringBoot 实战 (三) | 配置文件详解
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 数据库巡检项
  • #Z0458. 树的中心2
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (pojstep1.3.1)1017(构造法模拟)
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (转)Oracle存储过程编写经验和优化措施
  • (转)甲方乙方——赵民谈找工作
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .net 发送邮件
  • .Net 路由处理厉害了
  • .Net环境下的缓存技术介绍
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @KafkaListener注解详解(一)| 常用参数详解
  • [2018-01-08] Python强化周的第一天
  • [8-23]知识梳理:文件系统、Bash基础特性、目录管理、文件管理、文本查看编辑处理...
  • [Android 数据通信] android cmwap接入点
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [BZOJ3211]:花神游历各国(小清新线段树)
  • [C#] 如何调用Python脚本程序
  • [C++] Windows中字符串函数的种类
  • [CISCN2019 华北赛区 Day1 Web2]ikun
  • [HDOJ4911]Inversion
  • [HNOI2008]水平可见直线
  • [ios-必看] IOS调试技巧:当程序崩溃的时候怎么办 iphone IOS
  • [Kubernetes]9. K8s ingress讲解借助ingress配置http,https访问k8s集群应用
  • [LeetCode]—Longest Palindromic Substring 最长回文子串