博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
序列化--Serializable与Parcelable
阅读量:5824 次
发布时间:2019-06-18

本文共 1871 字,大约阅读时间需要 6 分钟。

前言:

序列化:就是将对象的状态信息转换为可以存储或传输的形式的过程

在我们平时开发中.我们用到序列化最多的地方就是通过intent传递对象,如果你要在intent中传递基本数据类型以外的对象,那么该对象必须实现Serializable或者Parcelable,否则会报错

注意:

  • 1:通过intent传递过去的对象是经过了序列化与反序列化的,虽然传送的对象和接收的对象内容相同,但是是不同的对象,他们的引用是不同的
  • 2:静态变量是不会经过序列化的,所以跨进程通信的时候静态变量是传送不过去的

1.Serializable


1.1 介绍

Serializable是java提供的序列化接口,使用起来特别简单,你只用实现这个接口就能够让这个对象支持序列化

public class Person implements Serializable{}复制代码

但是有一点要注意,就是你可以添加一个字段,serialVersionUID

private static final long serialVersionUID = 2387925265962719695L;复制代码

如果你不添加serialVersionUID,也不会影响使用,但是存在即合理,既然存在这个字段,那么他一定是有用的,当你序列化的时候这个UID会被写入文件,当反序列话的时候会去读取这个ID,并与反序列化的类中的UID对比,如果相同,那么反序列化就成功,如果不同,反序列化就会失败

当你不指定UID的时候,系统会根据类的结构生成相应的hash值赋值给UID,但是当你的类的结构发生变化,比如增加一个字段或者减少一个字段的时候,UID就会发生变化,那么反序列话的时候两个类的UID就不一样了,就会反序列化失败

所以手动指定UID,主要就是在类结构发生变化时,减少反序列化失败的几率(如果类发生了非常规的结构变化,比如类名变化,成员变量的类型变化,就算是指定了UID,反序列化也会失败)


1.2序列化与反序列化

Serializable序列化与反序列化有很多种方法,这里示范一下通过写入文件和读取文件来实现.

序列化:

File file = new File(getFilesDir()+"xiayu.txt");Person             person       = new Person("xiayu");ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file));outputStream.writeObject(person);复制代码

反序列化:

ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(getFilesDir()+"xiayu.txt"));Person            person                 = (Person) objectInputStream.readObject();复制代码

2.Parcelable

Parcelable是Android特有的序列化方式,他的实现相对Serialiable来说更加复杂一点,但是通过AS的一个插件就可以很方便的完成

插件名称: Android Parcelable Code Generator

当你完成对象的创建并实现Parcelable接口后,右键,选择Generate,接着选择Parcelable,并点击你需要序列化的字段,点击ok就完成可序列化了

这里面的方法就不做详细解析了,有兴趣的朋友可以去了解一下

(此截图引用自Android开发艺术探索)

3.Serializable与Parcelable的对比

Serializable:

  • 1.Serializable是java提供的可序列化接口
  • 2.Serializable的序列化与反序列化需要大量的IO操作,效率比较低
  • 3.Serializable实现起来很简单

Parcelable:

  • 1.Parcelable是Android特有的可序列化接口
  • 2.Parcelable的效率比较高
  • 3.Parcleable实现起来比较复杂

4.使用场景

  • 1.Parcleable: 内存中的序列化时使用,效率更高
  • 2.Serializable: 对象序列化到存储设备中、在网络中传输等

热门文章

转载地址:http://qmbdx.baihongyu.com/

你可能感兴趣的文章
数据指标/表现度量系统(Performance Measurement System)综述
查看>>
GitHub宣布推出Electron 1.0和Devtron,并将提供无限制的私有代码库
查看>>
论模式在领域驱动设计中的重要性
查看>>
有关GitHub仓库分支的几个问题
查看>>
EAServer 6.1 .NET Client Support
查看>>
锐捷交换机密码恢复(1)
查看>>
Method Swizzling对Method的要求
查看>>
佛祖保佑,永不宕机
查看>>
四、配置开机自动启动Nginx + PHP【LNMP安装 】
查看>>
Linux 目录结构及内容详解
查看>>
OCP读书笔记(24) - 题库(ExamD)
查看>>
.net excel利用NPOI导入oracle
查看>>
$_SERVER['SCRIPT_FLENAME']与__FILE__
查看>>
hive基本操作与应用
查看>>
excel快捷键设置
查看>>
html5纲要,细谈HTML 5新增的元素
查看>>
Android应用集成支付宝接口的简化
查看>>
[分享]Ubuntu12.04安装基础教程(图文)
查看>>
django 目录结构修改
查看>>
win8 关闭防火墙
查看>>