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

相关文章

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Go之errors.New和fmt.Errorf 的区别小结

《Go之errors.New和fmt.Errorf的区别小结》本文主要介绍了Go之errors.New和fmt.Errorf的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考... 目录error的基本用法1. 获取错误信息2. 在条件判断中使用基本区别1.函数签名2.使用场景详细对

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

一文带你迅速搞懂路由器/交换机/光猫三者概念区别

《一文带你迅速搞懂路由器/交换机/光猫三者概念区别》讨论网络设备时,常提及路由器、交换机及光猫等词汇,日常生活、工作中,这些设备至关重要,居家上网、企业内部沟通乃至互联网冲浪皆无法脱离其影响力,本文将... 当谈论网络设备时,我们常常会听到路由器、交换机和光猫这几个名词。它们是构建现代网络基础设施的关键组成

redis和redission分布式锁原理及区别说明

《redis和redission分布式锁原理及区别说明》文章对比了synchronized、乐观锁、Redis分布式锁及Redission锁的原理与区别,指出在集群环境下synchronized失效,... 目录Redis和redission分布式锁原理及区别1、有的同伴想到了synchronized关键字

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

基于Redisson实现分布式系统下的接口限流

《基于Redisson实现分布式系统下的接口限流》在高并发场景下,接口限流是保障系统稳定性的重要手段,本文将介绍利用Redisson结合Redis实现分布式环境下的接口限流,具有一定的参考价值,感兴趣... 目录分布式限流的核心挑战基于 Redisson 的分布式限流设计思路实现步骤引入依赖定义限流注解实现

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1