Android必备回顾:5、谈谈Serializable 接口和Parcelable 接口的区别?

本文主要是介绍Android必备回顾:5、谈谈Serializable 接口和Parcelable 接口的区别?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

Serializable 接口

Parcelable接口

内存中使用 Parcelable

持久化使用 Serializable

总结


谈谈Serializable 接口和Parcelable 接口的区别?
那么谈到这样的问题呢,我们平时在android 的开发过程中,那么主要用到的序列化手段,也就是这两种方式。
 

Serializable 接口

那么第一种方式是Serializable 接口,那么它是序列化的意思。这个单词本身就是序列化的意思。
它主要是java 中自带的,那么它表示将一个对象转换成可存储或可传输的状态。
那么序列化以后的对象可以在网络上进行传输,也可以存储到本地。

那么一般来说我们平时在使用过程中,更多的情况我们会使用 Serializable 来进行数据持久化的操作。

Parcelable接口

那么在安卓中呢,提出了 Parcelable 这样的序列化工具。
在我们安卓中这个 Parcelable 序列化这个工具,不同于之前的我们的Serializable。

其主要的一个最重要的部分。就是它用于分解后的每一部分,它对我们一个对象进行分解。那么在分解以后呢,它的每一部分都是 intent 所支持的所有的数据类型。

那么这样呢,也就实现了传递对象这样的功能了。
当然他要做持久化也是可以做的。但是他持久化这个方面呢有很多弊端。

  

那么这里呢,我们可以一起来看一下我们选择序列化方法的这个原理。
我们怎么去选择这两种不同的序列化呢?

内存中使用 Parcelable

如果说我们在使用内存情况下,使用内存来进行序列化传输的时候,我们使用 Parcelable 它会比 Serializable 的性能会要高。所以我们推荐使用 Parcelable。那么主要原因:是因为它是对一个对象进行分解,并且分解以后它每一部分内容 intent 都是可以支持的数据类型。

持久化使用 Serializable

那么我们的 Serializable 呢?
它更趋向于使用一种二进制的方式进行一个序列化的动作。那么 Serializable 它在序列化的时候会产生大量的临时变量,那么从这个中间呢,它会引起频繁 GC 的操作。

所以我们在内存中,比方说我们从 activity a 传一个对象到 activity b 的过程中。那么这个对象传输过程中,如果你去使用 Serializable,你会发现:会有很多临时变量产生。那么这样的话,它的性能相对就会较低一些。所以我们会考虑,只要是在程序中进行对象的传输,需要序列化的地方,我们都使用Parcelable, 那么这是在安卓这一块的。

好,那么如果说我们在持久化时,那么在持久化的过程中呢?
Serializable 它的持久化占用的存储空间,会比 Parcelable 要小一些,那么它是直接转换成我们的二进制的方式
那么在反序列化的过程中,我们的 Serializable 它也不会因为对象的增减字段,而造成这种反序列化的失败。

总结

所以我们一般来说在持久化对象的时候,会建议大家使用是Serializable。那么并且它存在我们的文件中,那么这个占用的磁盘空间也会更小一些。虽然说它的性能没有我们的 Parcelable 那么高。

所以 Parcelable 这种序列化方式主要用在内存使用情况,而我们的 Serializable 呢主要用在持久化这种情况。

Serializable 它在序列化的时候会产生大量的临时变量,可能会引起频繁 GC 的操作,消耗内存,性能相对就会较低一些。所以内存中使用Parcelable

Serializable 它的持久化占用的存储空间,会比 Parcelable 要小一些,它是直接转换成我们的二进制的方式。
那么在反序列化的过程中,我们的 Serializable 它也不会因为对象的增减字段,而造成这种反序列化的失败。

这篇关于Android必备回顾:5、谈谈Serializable 接口和Parcelable 接口的区别?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/292552

相关文章

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

Before和BeforeClass的区别及说明

《Before和BeforeClass的区别及说明》:本文主要介绍Before和BeforeClass的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Before和BeforeClass的区别一个简单的例子当运行这个测试类时总结Before和Befor

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Java中的Closeable接口及常见问题

《Java中的Closeable接口及常见问题》Closeable是Java中的一个标记接口,用于表示可以被关闭的对象,它定义了一个标准的方法来释放对象占用的系统资源,下面给大家介绍Java中的Clo... 目录1. Closeable接口概述2. 主要用途3. 实现类4. 使用方法5. 实现自定义Clos

Linux中的more 和 less区别对比分析

《Linux中的more和less区别对比分析》在Linux/Unix系统中,more和less都是用于分页查看文本文件的命令,但less是more的增强版,功能更强大,:本文主要介绍Linu... 目录1. 基础功能对比2. 常用操作对比less 的操作3. 实际使用示例4. 为什么推荐 less?5.

Java 关键字transient与注解@Transient的区别用途解析

《Java关键字transient与注解@Transient的区别用途解析》在Java中,transient是一个关键字,用于声明一个字段不会被序列化,这篇文章给大家介绍了Java关键字transi... 在Java中,transient 是一个关键字,用于声明一个字段不会被序列化。当一个对象被序列化时,被

java对接第三方接口的三种实现方式

《java对接第三方接口的三种实现方式》:本文主要介绍java对接第三方接口的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录HttpURLConnection调用方法CloseableHttpClient调用RestTemplate调用总结在日常工作

解读@ConfigurationProperties和@value的区别

《解读@ConfigurationProperties和@value的区别》:本文主要介绍@ConfigurationProperties和@value的区别及说明,具有很好的参考价值,希望对大家... 目录1. 功能对比2. 使用场景对比@ConfigurationProperties@Value3. 核

Java 的 Condition 接口与等待通知机制详解

《Java的Condition接口与等待通知机制详解》在Java并发编程里,实现线程间的协作与同步是极为关键的任务,本文将深入探究Condition接口及其背后的等待通知机制,感兴趣的朋友一起看... 目录一、引言二、Condition 接口概述2.1 基本概念2.2 与 Object 类等待通知方法的区别