序列化和反序列化之Serializable与Parcelable的异同

news2024/11/15 10:19:56

目录

  • 序列化和反序列化
  • Serializable 和 Parcelable 的区别
    • Serializable
    • 特点
    • Parcelable
    • 特点
    • Serializable、Parcelable 使用场景
    • 区别总结

在 Android 开发中,序列化和反序列化是将对象转换为字节流以及从字节流还原对象的过程。Java 提供了 Serializable 接口,而 Android 提供了 Parcelable 接口来实现这一功能。

序列化和反序列化

  • 序列化:将对象转换为字节流,以便存储或传输。
  • 反序列化:将字节流转换回对象

Serializable 和 Parcelable 的区别

Serializable

Serializable 是 Java 提供的标准序列化接口。实现这个接口的类可以自动进行序列化和反序列化。

import java.io.Serializable;

public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // getters and setters
}

特点

  • 自动化实现 Serializable 接口的类不需要额外的代码即可进行序列化和反序列化。
  • 性能较低:由于使用反射机制,序列化和反序列化的性能较低,尤其在 Android 中。
  • 适用范围广适用于任何 Java 平台,不仅限于 Android。

Parcelable

Parcelable 是 Android 提供的序列化接口,专为 Android 设计,性能优于 Serializable。

import android.os.Parcel;
import android.os.Parcelable;

public class User implements Parcelable {
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    protected User(Parcel in) {
        name = in.readString();
        age = in.readInt();
    }

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

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(age);
    }

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

    // getters and setters
}

特点

  • 手动实现:需要手动实现 writeToParcel 和 CREATOR,代码量较多。
  • 性能较高:直接进行内存操作,性能优于 Serializable。
  • 专为 Android 设计:适用于 Android 平台的进程间通信(IPC)。

Serializable、Parcelable 使用场景

  • Serializable 适用于需要跨平台或跨 JVM 传输数据的场景,或者不在乎性能的简单数据存储和传输。
  • Parcelable 适用于 Android 平台内的高性能数据传输,尤其是在 Activity、Service 和 Fragment 之间传递数据时。

区别总结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2106030.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jmeter中响应时间、TPS、服务器资源图表

一、响应时间图表 jmeter中的聚合报告已经足够显示响应时间&#xff0c;但是不会显示很详细&#xff0c;下面使用监听器中的插件查看&#xff0c; 添加后&#xff0c;可以不用更改任何配置&#xff0c;直接使用默认即可统计响应时间 还是抓取百度1分钟查看数据&#xff0c;也是…

Meta:大语言模型可以通过自我批判取得大幅提升!

夕小瑶科技说 原创 作者 | 谢年年 论文的审稿模式想必大家都不会陌生&#xff0c;一篇论文除了分配多个评审&#xff0c;最后还将由PC综合评估各位审稿人的reviews撰写meta-review。 最近&#xff0c;来自Meta的研究团队将这一模式引进到大模型的对齐训练中。模型同时扮演 执…

一. 从Hive开始

1. 怎么理解Hive Hive不能理解成一个传统意义上的数据库&#xff0c;应该理解成一个解决方案。 是Hadoop在hdfs和mapreduce之后才出现的一个结构化数据处理的解决方案。 Hdfs解决了大数据的存储问题&#xff0c;mapreduce解决了数据的计算问题。 一切似乎很美好。 但是使用成本…

人机环境系统智能与Petri网

人机环境系统工程是一门新兴的交叉学科&#xff0c;它以人、机、环境为系统&#xff0c;研究系统整体的优化。而 Petri 网是一种用于描述和分析系统动态行为的图形化建模工具。 在人机环境系统中&#xff0c;智能体现在人、机、环境三个要素之间的相互作用和协同工作。人的智能…

【微信小程序】搭建项目步骤 + 引入Tdesign UI

目录 创建1个空文件夹&#xff0c;选择下图基础模板 开启/支持sass 创建公共style文件并引入 引入Tdesign UI: 1. 初始化&#xff1a; 2. 安装后&#xff0c;开发工具进行构建&#xff1a; 3. 修改 app.json 4. 使用 5. 自定义主题色 创建1个空文件夹&#xff0c;选择下…

map和set的使用和底层实现

嗨喽大家好&#xff0c;时隔许久阿鑫又给大家带来了新的博客&#xff0c;c进阶——map和set的使用和底层实现&#xff0c;下面让我们开始今天的学习吧&#xff01; map和set的使用和底层实现 1.set和multiset的使用 2.map和multimap的使用 3.底层结构 1.set和multiset的使…

基于FCM模糊聚类算法的图像分割matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 FCM算法原理 4.2 图像分割中的应用 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 &#xff08;完整版代码包…

单列表集合顶层接口Collection

List&#xff1a;添加元素是有序&#xff0c;可重复&#xff0c;有索引 Set&#xff1a;添加元素是无序&#xff0c;不重复&#xff0c;无索引 Collection是单列集合的祖宗接口&#xff0c;它的功能是全部单列集合都可以继承使用。 1.添加元素 细节1:如果我们要往List系列集…

ArcGIS出图格网小数位数设置

1、比如要去掉格网后面的小数点&#xff0c;如何设置呢&#xff1f; 2、如下图设置。

《软件工程导论》(第6版)第12章 面向对象实现 复习笔记

第12章 面向对象实现 一、面向对象实现概述 1&#xff0e;主要任务 &#xff08;1&#xff09;把面向对象设计结果翻译成用某种程序语言书写的面向对象程序。 &#xff08;2&#xff09;测试并调试面向对象的程序。 2&#xff0e;面向对象程序质量的影响因素 &#xff0…

Redis Pub/Sub模式:分布式系统中的解耦利器

序言 Redis的发布订阅&#xff08;Pub/Sub&#xff09;是一种消息通信模式&#xff0c;允许发布者&#xff08;Publisher&#xff09;发送消息到频道&#xff08;Channel&#xff09;&#xff0c;而订阅者&#xff08;Subscriber&#xff09;可以订阅一个或多个频道来接收消息…

惠中科技光伏清洗剂:绿色清洁,高效发电的守护者

在当今全球能源转型的大背景下&#xff0c;光伏产业作为绿色能源的重要组成部分&#xff0c;正以前所未有的速度蓬勃发展。然而&#xff0c;光伏板长期暴露于户外环境&#xff0c;不可避免地会遭受灰尘、鸟粪、油污等污染物的侵袭&#xff0c;这些污染物如同阴影般覆盖在光伏板…

代码随想录Day 35|动态规划,二维dp数组,滚动数组,leetcode题目:416.分割等和子集

提示&#xff1a;DDU&#xff0c;供自己复习使用。欢迎大家前来讨论~ 文章目录 动态规划Part03一、 动态规划&#xff1a;01背包理论基础01 背包二维dp数组01背包 二、动态规划&#xff1a;01背包理论基础&#xff08;滚动数组&#xff09;思路一维dp数组&#xff08;滚动数组&…

echarts三维立体扇形图+三维立体环形图配置详解记录

先看效果&#xff0c;注&#xff1a;三维立体echarts比较吃性能&#xff0c;同一页面如果有多个三维图进行渲染&#xff0c;进行跳转时可呢能会对整体页面产生影响&#xff0c;具体解决方法可查看本人另一篇文章 多个echarts使用3D导致页面卡顿的解决办法 三维立体扇形图 三维…

c# Avalonia 架构开发跨平台应用

实现了一个计算器的应用&#xff0c;先看在不同平台的效果 windows11上 ubuntu上 统信UOS 上 麒麟 kylin v10 好了&#xff0c;先说一下问题&#xff0c;如果想一套代码在不同平台同时运行&#xff0c;里面调用的逻辑还是要分系统的&#xff0c;先分linux系统和windows系统&a…

2024年全国铁路(铁路、高铁、地铁)矢量数据集

数据更新时间​&#xff1a;2024年6月​&#xff1b; ​数据范围&#xff1a;全国各省&#xff08;不包含台湾&#xff09;; 数据格式​&#xff1a;shp; ​数据包含类型&#xff1a;铁路、高铁、地铁 数据​坐标信息&#xff1a; EPSG Code 4326 大地基准面 D_WGS_1…

CTFSHOWRCE

web3 1.打开环境&#xff0c;上面给了一句php的话&#xff0c;意思是get传参url有文件包含漏洞 2.get传参运用伪协议&#xff0c;post传参命令执行看目录。 3.上面有一个文件ctf_go_go_go,访问这个文件就有flag web4 1.打开环境&#xff0c;和上一关的一样&#xff0c;但是不…

CSS实现优惠券透明圆形镂空打孔效果等能力学习

前言&#xff1a;无他&#xff0c;仅供学习记录&#xff0c;通过一个简单的优惠券Demo实践巩固CSS知识。 本次案例主要学习或巩固一下几点&#xff1a; 实现一个简单的Modal&#xff1b;如何进行复制文本到粘贴板&#xff1b;在不使用UI的svg图片的情况下&#xff0c;如何用C…

【C++】模板特化

目录 一、非类型模板参数 二、模板的特化 &#x1f31f;概念 扩展小知识补充(1)&#xff1a; 扩展小知识补充(2)&#xff1a; &#x1f31f;函数模板特化 扩展小知识&#xff1a; &#x1f31f;类模板特化 ✨全特化 ✨偏特化 • 部分特化&#xff1a;将模板参数表中…

前端几种常见框架【第一节】

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; 最近比较忙&#xff0c;本人在复习软考中级设计考试&#xff0c;所以本系列文从零基础开始复习软考到结束软考&#xff08;计算机技术与软件专业技术资格考试&#xff09;作为国家级职业资格认证考试&#x…