Parcelable 和 Serializable的区别和使用

2023-10-27

序列化:为了保存在内存中的各种对象的状态,并可以把保存的对象的状态读出来。

一、Seralizable介绍:

1.Serializable 是java的序列化技术,最简单的使用方式为在需要序列化的class增加implements Serializable,并增加一个唯一个序列化id: private static final long serialVersionUID = 1L; 默认方式最好直接设置为1L,因为java  sdk会自动进行hash计算,并生成唯一的UID值。手动设置serialVersionUID的好处是当前class如果改变了成员变量,比如增加或者删除之后,这个UID是不改变的,那么反序列化就不会失败;自动设置则在改变了成员变量之后就会重新计算获得新的UID,从而导致失败。不过,大多数情况下两者都可以。

2.Seralizable相对Parcelable而言,好处就是非常简单,只需对需要序列化的类class执行就可以,不需要手动去处理序列化和反序列化的过程,所以常常用于网络请求数据处理,Activity之间传递值的使用。

Activiyt之间传递如图:




3.Seralizable无法序列化静态变量,使用transient修饰的对象也无法序列化。

4.当一个父类实现序列化,子类自动实现序列化,不需要再显示实现Serializable接口。

二、Parcelable介绍:

1.Parcelable是android特有的序列化API,它的出现是为了解决Serializable在序列化的过程中消耗资源严重的问题,但是因为本身使用需要手动处理序列化和反序列化过程,会与具体的代码绑定,使用较为繁琐,一般只获取内存数据的时候使用。

2.而Parcelable依赖于Parcel,Parcel的意思是包装,实现原理是在内存中建立一块共享数据块,序列化和反序列化均是操作这一块的数据,如此来实现。


3.Parcelable的三个过程:序列化、反序列化和描述

序列化:

@Override
    public void writeToParcel(Parcel dest, int flags) {

    }

反序列化:

class User{

    }

    public static final Creator<User> CREATOR = new Creator<User>() {
        @Override
        public User createFromParcel(Parcel source) {
            return null;
        }

        @Override
        public User[] newArray(int size) {
            return new User[0];
        }
    };

描述:

@Override
    public int describeContents() {
        return 0;
    }

序列化的时候使用:writeXX

反序列化的时候使用:readXX

描述describecontents:


一般情况下设置为0,特别的为

public static final int CONTENTS_FILE_DESCRIPTOR = 0x0001;

这种是当要求为file descriptor(文件描述符)被序列化的情况。


【参考文档】:

https://developer.android.com/reference/android/os/Parcelable

http://www.developerphil.com/parcelable-vs-serializable/

https://blog.csdn.net/Justin_1107/article/details/72903006



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Parcelable 和 Serializable的区别和使用 的相关文章

  • IHS 禁用SSLV2 启用SSLV3

    昨天完成了PCI第二季度的ASV扫描 也扫出几个问题 主是IHS SSL加密比较弱 1 PCI ASV扫描出来的两个问题 1 38140 SSL Server Supports Weak Encryption Vulnerability 2
  • FastReport VCL 6.7.6 For Delphi10.4.2 安装图解教程

    FastReport VCL 6 7 6 For Delphi10 4 2 安装图解教程 Fastreport控件的安装 一步一步按说明来 不难搞 1 先关闭Delphi 2 右键 以管理员身份运行 对应版本的recompile exe 2
  • 图片情感分析(2):图像情感分析模型

    图像情感分析模型是基于卷积神经网络建立的 卷积神经网络的构建用了keras库 具体代码实现以及代码运行在下一篇贴出 模型包括3个卷积层 2个池化层 4个激活函数层 2个Dropout层 2个全连接层 1个Flatten层和最终分类层 图片初
  • Java创建数组的四种方式

    1 使用默认值来初始化 语法 数组元素类型 数组名称 new 数组元素类型 数组长度 EG int nums new int 5 创建了一个类型为int 名字为nums 长度为5的数组 2 先声明一个数组 再给值 语法 数据元素类型 数组名
  • 37 年来首次 FSF 允许非正式会员提名董事会候选人;Linux RamFS 文件系统移植到 Rust;Git 2.35 发布

    整理 宋彤彤 责编 屠敏 开源吞噬世界的趋势下 借助开源软件 基于开源协议 任何人都可以得到项目的源代码 加以学习 修改 甚至是重新分发 关注 开源日报 一文速览国内外今日的开源大事件吧 一分钟速览新闻点 成立 37 年来首次 FSF 允许
  • Spring boot配置logback日志打印到指定路径文件

    在实际项目开发中 一般都是使用log打印日志到指定路径 生成文件 而平时使用的System out pring 只能输出日志到控制台 当我们把项目打成war包部署到服务器上 会有不用的用户使用我们的应用 这个时候如果一个客户端出现了问题 那
  • 断弧图片数据集 数据集扩充 增强

    图像处理可以用到的数据 这是原始图像总共1356张 对应的XML文件是它的标签 此数据可以用来做图像目标检测 YOLOv4 v3 SSD faster rcnn 数据集增广 数据集扩充 数据集增强的常用方法与软件 https blog cs
  • 修改pycharm缓存文件路径

    Pycharm在使用过程中 Pycharm会生成大量缓存文件 而这些缓存文件默认存储在C盘的用户目录里面 导致C盘空间被占用 目标 将C盘用户目录下的 Pycharm2019转移到D盘 D cache pycharm 文件夹下 如下图 解决
  • div设置边角小三角形

    div class leftmsg div div class rightmsg div
  • 使用NCNN的INT8量化方式进行推理

    本文以NCNN框架为例 实践量化在推理中的巨大作用 加深对神经网络量化的理解 NCNN当前版本只支对称量化 下面以INT8精度为例介绍NCNN的量化使用方式 编译NCNN mkdir build cd build cmake 进入到buil
  • Java面试--常见集合

    Java面试 基础 ArrayList ArrayList的扩容机制 FailFast和FailSafe ArrayList和LinkedList HashMap 介绍一下put方法流程 1 7和1 8有何不同 负载因子默认值为何是0 75
  • CSDN编程竞赛 ——— 第六期之python

    CSDN编程竞赛报名地址 https edu csdn net contest detail 16 请不要删掉此地址 目录 前言 背景 大赛简介 参赛流程 参赛经历 解题思路 经验心得 资料分享 前言 背景 目前为止共参加过三次 不过没拿到
  • 20201013 矩阵2范数matlab求解

    这里是引用n norm X 返回矩阵 X 的 2 范数或最大奇异值 该值近似于 max svd X 示例 n norm X p 返回矩阵 X 的 p 范数 其中 p 为 1 2 或 Inf https ww2 mathworks cn he
  • java导出Excel增加下拉框选项,解决小数据量和大数据量下拉框选项的问题

    文章目录 java导出Excel增加下拉框选项 一 小数据量情况 二 大数据量情况 java导出Excel增加下拉框选项 java结合easyExcel 添加传参模型ConsumablesAddDTO 一 小数据量情况 仅供参考 二 大数据
  • 鸿蒙系统怎么退出,华为鸿蒙2.0系统升级了怎么退回EMUI11系统?操作教程详解[多图]...

    华为鸿蒙2 0系统升级了怎么退回EMUI11系统 很多用户升级了又不知道如何才能退回到原来的系统 下面就让安卓乐园小编为大家带来 2 0系统升级退回EMUI11系统操作教程详解 这次开启华为鸿蒙2 0系统手机开发者beta版公测招募的机型有
  • 遗传算法最通俗的讲解案例

    遗传算法 遗传算法求全局最优解或者近似优解 遗传算法GA可以用到数据挖掘领域 由于缺少一些详细的例子 导致难以理解 以下是一个大牛的遗传算法的详细例子 通过这个例子 我们可以详细而且直观的加深对遗传算法的理解 遗传算法的有趣应用很多 诸如寻
  • 机器学习 之 python实现 多元线性回归 梯度下降 普适算法与矩阵算法

    介于网上的多元线性回归梯度下降算法多为固定数量的因变量 如三元一次函数 y 1 x 1
  • 有向图问题1--深度优先、广度优先遍历和拓扑排序

    有向图基础 术语定义 一个顶点的出度为由该顶点指出的边的总数 一个顶点的入度为指向该顶点的边的总数 一条有向边的第一个顶点称为它的头 第二个顶点称为它的尾 数据结构 使用邻接表来表示有向图 其中v gt w表示为顶点v对应的邻接链表中包含一

随机推荐

  • 纯CSS实现背景色渐变

    这里简单介绍一下如何用纯CSS实现背景渐变色 一 关键词 1 linear gradient 首先我们要使用的就是CSS中的linear gradient 函数 它用于创建一个表示两种或多种颜色线性渐变的图片 其结果属于数据类型 是一种特别
  • 【VerilogHDL】模块

    VerilogHDL 模块 模块基本语法 2选1多路选择器实例 模块描述方式 行为级或算法级的描述方式 行为级建模 4bit 的二进制行波计数器 带进位 数据流描述方式 数据流级建模 门级描述方式 门级建模 开关级描述方式 开关级建模 描述
  • 电子科技大学计算机系统结构半期考试参考答案

    2023 答案 半期试题 15分 1 试分析采用哪种设计方案实现求浮点数乘法FPMUL对系统性能提高更大 假定FPMUL操作占整个测试程序执行时间的10 一种设计方案是增加专门的FPMUL硬件 可以将FPMUL操作的速度加快到10倍 另一种
  • git新手常见错误01

    错误信息 error Your local changes to the following files would be overwritten by checkout idea workspace xml Please commit y
  • 【ModelArts系列】华为ModelArts训练yolov3模型(训练作业)

    一 参考资料 华为ModelArts Notebook训练yolov3模型 二 相关介绍 在ModelArts的 训练任务 中运行ModelZoo中模型 以yolov3为例 训练集为 COCO2014 运行环境 运行环境 ModelArts
  • C++11 string与int转换

    int num stoi 4651 string str to string 1234
  • 深入理解【DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection】

    DINO DETR with Improved DeNoising Anchor Boxes for End to End Object Detection URL https arxiv org abs 2203 03605 DETR系列
  • 阿里云微消息MQTT连接参数取值位置记录

    二 连接参数获取 Broker Address取值如下 Topic 取值地方 Client ID GroupID 客户端参数 如下 GID MQTT ConsumerTest0001 user Name 和Password取值位置如下 Ac
  • 论文笔记:A survey of deep nonnegative matrix factorization

    0 abstract 深度非负矩阵分解 Deep NMF 是近年来一种有效的特征提取策略 通过基于 NMF 算法反复分解矩阵 我们获得了分层神经网络结构 并探索了数据的更多可解释表示 本文主要针对 Deep NMF 进行了一些理论研究 系统
  • CTFSHOW web入门——web9

    在生产环境vim改错别字死机了 vim异常关闭 了解到linux下vi vim异常关闭是会存留 swp文件 访问index php swp 获得flag
  • Nginx安装官方YUM源安装部署

    注意 我使用的是Linux Rocky8 6版本 兼容部分CentOS版本 Ubuntu和其他OS版本 命令 文件路径 相关环境版本需要参考官方文档 Nginx安装部署 安装Nginx软件的方式有很多种 分为如下几种 1 源码编译 gt N
  • 扑克牌问题之比较大小(JAVA)

    当然扑克牌问题中最复杂的就是比较大小了 然而扑克牌中的大小并不是ascii码决定的 而是有扑克牌自己的规则 下面就是扑克牌问题中神一样的方法 int position char c String line 34567890JQKA2 ret
  • Python3数据类型

    Python3数据类型 数据类型 描述 可变 Y N Number 数字 N String 字符串 N List 列表 Y Tuple 元组 N Set 集合 Y Dictionary 字典 Y python中数字有四种类型 整数 布尔型
  • Windows下的Rime輸入法與小鶴雙拼的配置

    今天結束了這一週的考試 於是有一個晚上的空閒時間來寫博客了 考慮到已經沒有使用簡體字的太大必要了 所以我也準備在博客的書寫中使用繁體漢字 這就涉及到了很多輸入法 比如我正在使用的QQ輸入法 無法正確處理一簡對多繁 的一個大問題 大多數的輸入
  • java 使用hutool工具进行MD5加密

    引入依赖
  • 咏儿 gz.lrd

    人 生 惬 意 几 个 秋 闲 云 野 鹤 解 春 愁 醉 看 过 往 十 年 数 还 笑 今 朝 小 儿 休
  • 高仿美团主界面<一>

    声明 本demo还未完善 正在持续更新中 先上图吧 这个小demo资源图片全是用青花瓷抠出来的 现在只是完成了 一部分 会持续更行中 有兴趣的朋友可以关注我 我们一起coding 一起分享 然后这个demo很简单 但是有一些小细节可以和大家
  • MySQL性能优化配置/etc/my.cnf参数

    MySQL etc my cnf文件配置 client port 3306 socket var lib mysql mysql sock default character set utf8 mysql no auto rehash 仅允
  • Java多线程使用案例【附可运行代码】

    标题Java多线程使用案例 1 创建线程池 创建任务 将任务提交到线程池中执行 public class Test1 private static Map
  • Parcelable 和 Serializable的区别和使用

    序列化 为了保存在内存中的各种对象的状态 并可以把保存的对象的状态读出来 一 Seralizable介绍 1 Serializable 是java的序列化技术 最简单的使用方式为在需要序列化的class增加implements Serial