首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android序列化Parcelable和Serializable使用详解

序列化与反序列 首先来了解一下序列化与反序列化序列化 由于存在于内存中对象都是暂时,无法长期驻存,为了把对象状态保持下来,这时需要把对象写入到磁盘或者其他介质中,这个过程就叫做序列化。...概括性来说序列化是指将对象实例状态存储到存储媒体(磁盘或者其他介质)过程。在此过程中,先将对象公共字段和私有字段以及类名称(包括类所在程序集)转换为字节流,然后再把字节流写入数据流。...实现序列化必要条件 一个对象要实现序列化操作,该类就必须实现了Serializable接口或者Parcelable接口,其中Serializable接口是在java中序列化抽象类,而Parcelable...序列化应用情景 主要有以下情况(但不限于以下情况) 1)内存中对象写入到硬盘; 2)用套接字在网络上传送对象; 3)通过RMI(Remote Method Invoke 远程方法调用)传输对象...Parcelable和Serializable是两个接口,它们作用是让实现了其中一个接口对象能够被序列化和反序列化

1.5K10

彻底理解Serializable和Parcelable

第一个问题:什么是序列化和反序列化序列化 (Serialization)是将对象状态信息转换为可以存储或传输形式过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。...(STREAM_VERSION); } //写入对象方法 public final void writeObject(Object obj) throws IOException {...//后面的一坨就是我们person对象非transient成员变量,写过程跟写person对象一模一样,当做对象来做递归写入 到这里我们可以回答上面的问题了,JDK对String序列化做了优化,所有不用写入...,一个是writeToParcel方法,一个是CREATOR对象,很容易联想到,前者在序列化时候会被调用,方法参数里有一个Parcel对象dest,我们将需要序列化字段逐个写入dest即可,而CREATOR...Serializable使用起来简便,能够自动将父类序列化字段一并序列化,所以这里该怎么选,见仁见智,但是使用时候知道底层原理,会更自如一点,如果场景要求极致性能可以使用Parcelable,一般场景使用

1.1K30
您找到你想要的搜索结果了吗?
是的
没有找到

Android 进阶6:两种序列化方式 Serializable 和 Parcelable

序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象状态,重新创建该对象。...二进制序列化保持类型保真度,这对于在应用程序不同调用之间保留对象状态很有用。例如,通过将对象序列化到剪贴板,可在不同应用程序之间共享对象。您可以将对象序列化到流、磁盘、内存和网络等等。...Serializable 有以下几个特点: 序列化类中,未实现 Serializable 属性状态无法被序列化/反序列化 也就是说,反序列化一个类过程中,它序列化属性将会调用无参构造函数重新创建...因此这个属性无参构造函数必须可以访问,否者运行时会报错 一个实现序列化类,它子类也是序列化 下面是一个实现了 Serializable 实体类: public class GroupBean...//其他情况会返回一个位掩码 public int describeContents(); //将对象转换成一个 Parcel 对象 //参数中 dest 表示要写入

1.4K50

Android序列化总结

(1)序列化 由于存在于内存中对象都是暂时,无法长期驻存,为了把对象状态保持下来,这时需要把对象写入到磁盘或者其他介质中,这个过程就叫做序列化。...概括性来说序列化是指将对象实例状态存储到存储媒体(磁盘或者其他介质)过程。在此过程中,先将对象公共字段和私有字段以及类名称(包括类所在程序集)转换为字节流,然后再把字节流写入数据流。...(4)序列化应用情景 主要有以下情况(但不限于以下情况) 1)内存中对象写入到硬盘; 2)用套接字在网络上传送对象; Serializable Serializable是java提供一个序列化接口...具体过程是这样序列化操作时候系统会把当前类serialVersionUID写入序列化文件中,当反序列化时系统会去检测文件中serialVersionUID,判断它是否与当前类serialVersionUID...,当然Bundle本身也是一个类似键值对容器,也存储Parcelable实现类,其API方法跟Intent基本相似,由于这些属于android基础知识点,这里我们就不过多介绍了。

77120

Android序列化权威面试指南,资深面试者秘诀

Parcelable实现原理是将对象分解为原始数据类型,通过writeToParcel()方法写入Parcel对象,再通过CREATOR反序列化。...在writeToParcel()方法中,将对象各个字段写入Parcel对象中,注意字段顺序和类型要与读取时保持一致。...注意事项 问题: 在实现Parcelable时有哪些需要注意地方? 出发点: 面试官希望了解面试者对实现Parcelable过程中可能遇到问题和注意事项掌握程度。...跨进程传输问题: 如果使用Parcelable在跨进程传输数据时,需要确保所有相关类都是序列化,并且数据量不要过大,以免导致TransactionTooLargeException异常。...参考简答: Serializable: 尽量减少需要序列化对象属性 使用transient关键字标记不需要序列化属性 使用自定义序列化机制 Parcelable: 使用高效数据结构定义对象 尽量减少需要序列化对象属性

7510

Android开发之漫漫长途 X——Android序列化

Java中Serializable Serializable 是Java所提供一个序列化接口,它是一个空接口,为对象提供标准序列化和反序列化操作。...,ObjectOutputStream会通过反射首先调用writeReplace这个方法, * 在这里我们可以替换真正送去序列对象, * 如果我们没有重写,那序列化对象就是最开始对象...* @return */ private Object writeReplace() { //序列化Person时候我们并没有直接写入Person对象,而是写入了PersonSerializableProxy...反序列化产生对象并不是通过构造器创建,那么很多依赖于构造器保证约束条件在对象序列化时都无法保证。比如一个设计成单例类如果能够被序列化就可以分分钟克隆出多个实例......至此我们就得到了反序列化对象 ---- 本篇总结 我们本篇详细分析了Android序列化相关知识,你可以使用Java中Serializable也可以使用Parcelable

35320

Android 序列化 Serializable与Parcelable

(1)序列化 由于存在于内存中对象都是暂时,无法长期驻存,为了把对象状态保持下来,这时需要把对象写入到磁盘或者其他介质中,这个过程就叫做序列化。...总结一句就是:将序列化数据重新恢复成目标对象过程(创建出与原对象完全相同副本)。 (3)为什么要进行序列化 永久保存对象数据(将对象数据保存在文件或者磁盘中)。...具体过程是这样序列化操作时候系统会把当前类serialVersionUID写入序列化文件中,当反序列化时系统会去检测文件中serialVersionUID,判断它是否与当前类serialVersionUID...* 这里只序列化name属性 */ private void writeObject(java.io.ObjectOutputStream out) throws IOException...*/ @Override public int describeContents() { return 0; } /** * 将当前对象写入序列化结构中

1.9K60

Serializable和Parcelable再次回忆

个人博客地址 http://dandanlove.com/ 自己开发Android也有些时间了,Serializable和Parcelable遇到过不止一次了。...在序列化期间,对象将其当前状态写入到临时或持久性存储区。 反序列化 就是读取序列化后保存在存储区序列化信息或反序列化对象状态,重新创建该对象。...自动生成也自己写,如0L,1L,2L...)。...Parcelable内部包装了序列化数据,可以在Biander中自由传输,从代码中可以看出,在序列化过程中需要实现功能有序列化,反序列化和内容描述。...Parcelable主要用于内存序列化上,通过Parcelable对象序列化到存储设备中或者将对象序列化后通过网络传输也都是可以,但是这个过程稍显复杂,因此在这两种情况下建议使用Serializable

55220

漫谈序列化—使用、原理、问题

现在要把这个User对象保存下来,不然要是这个对象被别人改成了男咋办。...所以,为了提高在Android中对象传输效率呢,Android就采用了新序列化方式——Parcelable。...原理 先说说Parcelable写法中这几个方法参数意思: createFromParcel,User(Parcel in) ,代表从序列化对象中创建原始对象 newArray,代表创建指定长度原始对象数组...writeToParcel,代表将当前对象写入序列化结构中。...正常情况下,对象在内存中进行传输确实是Parcelable比较快,但是Serializable是有缓存概念,有人做了一个比较有趣实验: 当序列化一个超级大对象图表(表示通过一个对象,拥有通过某路径能访问到其他很多对象

82120

Parcelable与Serializable

Serializable使用大量反射和临时变量,而Parcelable少许反射 通过启动 Activity 过程分析 Parcelable 序列化过程: 熟悉这一过程朋友过程肯定知道,startActivity...省略 } Value 写入过程,系统自己定义了一套类型映射关系,每个 Value 写入都会额外附加 4 个字节类型信息。...) { if (p == null) { writeString(null); return; } //写入Parcelable全限定名,反序列化时...Parcelable 只是一个序列化规则,它向开发人员暴露 Parcel 操作对象,自行写入序列化数据。...读取 key,紧接着 readValue 方法读取对应 value: 前面分析**序列化过程写入 value 数据时,先写入该 value 数据对应 int 类型,该类型在反序列化时会用到,此时系统就是根据该

1.2K20

一个Java小白面试得力集团收获

序列化就是把字节序列恢复为对象过程。· Parcelable和Serializable都能实现序列化。...而Parcelable是Android中序列化方式,因此更适合在Android平台上,它缺点就是使用起来稍微麻烦点,但是它效率很高,这是Android推荐序列化方式,因此我们要首选Parcelable...Parcelable主要用在内存序列化上,Serializable主要用于将对象序列化到存储设备中或者将对象序列化后通过网络传输。...替换其他所有的json库,java世界里没有其他json库能够和fastjson相比了。...反序列化对象时必须有序列化对象class文件。 当通过文件、网络来读取序列化对象时,必须按实际写入顺序读取。

70730

Android点将台:外交官

零、前言 1.本文知识点 [1].Intent简介及[隐式调用]和[显示调用] [2].对象序列化与反序列化:[Parcelable(简)]和`Serializable] [3]....1.永久保存对象数据(保存在文件当中,或者是磁盘中),需要时反序列化生成对象 2.将对象数据转换成字节流进行网络传输 3.使用Intent时传递序列化对象 1.对象序列化Serializable /.../类序列化,只要实现Serializable即可,非常简单 class Person(var name: String?...性能要强于Serializable 在读写数据时候,Parcelable是在内存中直接进行读写 而Serializable是通过使用IO流形式将数据读写入在硬盘上 Parcelable无法将数据进行持久化...也有一堆put,get 其中最重要是有put序列化对象(Parcelable/Serializable)方法 A mapping from String keys to various {@

11810

Android中序列化Parcelable和Serializable

概述 序列化:将一个对象转换成 存储或 可传输状态。...Parcelable和Serializable区别 作用 Serializable作用是为了保存对象属性到本地文件、数据库、网络流、rmi以方便数据传输,当然这种传输可以是程序内也可以是两个程序间...性能比较 在内存使用中,Parcelable性能方面要强于Serializable; Serializable序列化操作时候会产生大量临时变量(原因是使用了反射机制),从而导致GC频繁调用,因而性能比...在内存上开销比较小,因此内存直接进行数据传递时候,Android推荐使用Parcelable; 在读写数据时候,Parcelable是在内存中直接进行读写,而Serializable是通过IO流形式将数据写入到硬盘上...* 在进行反序列化时,JVM会把传来字节流中serialVersionUID与本地相应实体类serialVersionUID进行比较, * 如果相同就认为是一致,可以进行反序列化,否则就会出现序列化版本不一致异常

71010

android之Parcelable介绍

image.png Parcelable Parcelable概述在SDK中是这样:这些类接口可以将实例写入或从中还原 Parcel。...简单Parcelable是Android为我们提供序列化接口。 类似javaSerializable类。...序列化 由于存在于内存中对象都是暂时,无法长期驻存,为了把对象状态保持下来,这时需要把对象写入到磁盘或者其他介质中,这个过程就叫做序列化。...概括性来说序列化是指将对象实例状态存储到存储媒体(磁盘或者其他介质)过程。在此过程中,先将对象公共字段和私有字段以及类名称(包括类所在程序集)转换为字节流,然后再把数据流字节流写入。...在随后对对象进行反序列化时,将创建出与原对象完全相同副本。

61920

Android跨进程通信IPC之4——AndroidIPC基础1

不过本人并不推荐 (二) Parcelable接口 Parcelable也是一个接口,只要实现了这个接口,一个类对象就可以实现序列化和并且通过Intent和Binder传递。...(三) Serializable 和Parcelable区别 1、平台区别 Serializable是属于 Java 自带,表示一个对象可以转换成存储或者可传输状态,序列化对象可以在网络上进行传输...4、本质区别 1、Serializable本质是使用了反射,序列化过程比较慢,这种机制在序列化时候会创建很多临时对象,比引起频繁GC、 2、Parcelable方式本质是将一个完整对象进行分解...类名字和内容写入Parcel中,实际上它是通过回调此ParcelablewriteToParcel()方法来写入数据。...readParcelable(ClassLoader):读取并返回一个新Parcelable对象 writeParcelableArray(T[],int):写入Parcelable对象数组。

1.2K30

Android Parcelable接口使用方法详解

2.实现Parcelable就是为了进行序列化,那么,为什么要序列化?...1)永久性保存对象,保存对象字节序列到本地文件中; 2)通过序列化对象在网络中传递对象; 3)通过序列化在进程间传递对象。...3.实现序列化方法 Android中实现序列化有两个选择:一是实现Serializable接口(是JavaSE本身就支持),一是实现Parcelable接口(是android特有功能,效率比实现Serializable...4.选择序列化方法原则 1)在使用内存时候,Parcelable比Serializable性能高,所以推荐使用Parcelable。...步骤 1)implements Parcelable 2)重写writeToParcel方法,将你对象序列化为一个Parcel对象,即:将类数据写入外部提供Parcel中,打包需要传递数据到

1.5K21
领券