首页 > 其他分享 >Android开发 - Serializable 接口对对象进行“打包”传递和接收后“解包”解析

Android开发 - Serializable 接口对对象进行“打包”传递和接收后“解包”解析

时间:2024-08-29 14:49:28浏览次数:5  
标签:name 对象 age 接口 解包 Android Serializable User

Serializable 是什么

  • Serializable 是一种接口,用于将对象转换成字节流。通俗地说,Serializable 是一种让对象能够“打包”和“解包”的方式,使得它们可以在存储和传输时保留其状态和数据

Serializable 的好处

  • 在程序中,我们经常需要在不同地方传递数据,比如在两个 Activity 之间传递一个自定义对象,或者将对象保存在文件中,甚至通过网络发送给另一台计算机。为了实现这些,必须将对象转换为一种可以传输或存储的格式——这就是序列化的作用。

  • Serializable 是一种简单的序列化方式,可以将对象转换为字节流,便于存储和传输

Serializable 的工作原理

  • 当一个实现了 Serializable 接口,它的对象就可以被序列化。这意味着你可以将这个对象的当前状态转换为一串字节(类似于“拍照”保存下来)。稍后可以将这些字节转换回原来的对象(“还原”状态)

  • Serializable 接口非常简单,只需要实现这个接口即可。它没有任何需要实现的方法,这使得使用起来非常方便

代码示例

  • 假设有一个 User 类,并希望在两个 Activity 之间传递这个对象

    • 定义一个实现 Serializable 接口的类

      import java.io.Serializable;
      
      public class User implements Serializable {
          private String name;
          private int age;
      
          public User(String name, int age) {
              this.name = name;
              this.age = age;
          }
      
          // getter 和 setter 方法
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public int getAge() {
              return age;
          }
      
          public void setAge(int age) {
              this.age = age;
          }
      }
      
      • 在上面的示例中, User 类实现了 Serializable 接口。这样,User 对象就可以被序列化和反序列化
    • 使用 Serializable 进行对象传递与接收

      • 传递对象:假设你在一个 Activity 中想要将 User 对象传递到另一个 Activity

        Intent intent = new Intent(CurrentActivity.this, NextActivity.class);
        User user = new User("Alice", 30);
        intent.putExtra("user_data", user);  // 使用 putExtra 将对象传递
        startActivity(intent);
        
      • 接收对象:在接收的 Activity 中,你可以通过以下方式获取传递的 User 对象

        Intent intent = getIntent();
        User user = (User) intent.getSerializableExtra("user_data");  // 使用 getSerializableExtra 获取对象
        

Serializable 的优缺点

  • 优点:

    1. 简单易用:只需要实现 Serializable 接口,不需要额外的代码方法
    2. Java 原生支持SerializableJava 自带的接口不需要依赖第三方库
  • 缺点:

    1. 性能不如 Parcelable 高效Serializable 使用反射(reflection)机制效率较低,尤其是在 Android 中,Parcelable 更推荐使用

    2. 占用更多内存序列化对象占用更多的内存空间

总结

  • Serializable 是 Java 提供的一种序列化接口,用于将对象转换为字节流,方便存储和传输

  • 使用非常简单只需要实现 Serializable 接口即可

  • 适合简单对象传输:但在 Android 中,Parcelable 是一个更高效替代方案,特别是在大量对象传输

  • 通俗来说,Serializable 就像给对象“拍照”和“复原”的工具,让你可以把对象保存下来,传到另一台电脑上,或者下次打开再恢复成原来的样子

标签:name,对象,age,接口,解包,Android,Serializable,User
From: https://www.cnblogs.com/ajunjava/p/18386647

相关文章

  • Android开发 - “序列化”与“反序列化”解析
    简介序列化和反序列化是计算机科学中两个非常常用的概念。简单来说,它们是将数据转换成不同形式的过程序列化(Serialization)序列化是将对象(比如一个Java对象或一个Python字典)转换成一种可以保存或传输的格式的过程。这种格式通常是字节流或字符串。通过序列化,你可以将一个......
  • Android App启动流程
    1.通过Launcher启动应用时,点击应用图标后,Launcher调用startActivity启动应用。 2.LauncherActivity最终调用Instrumentation的execStartActivity来启动应用。 3.Instrumentation调用ActivityManagerProxy(ActivityManagerService在应用进程的一个代理对象)......
  • Android开发 - Parcel 类打包对象数据进行传递解析
    Parcel是什么Parcel是用于对象序列化和反序列化的一个类。通俗地说,它是一种轻量级的容器,常用于打包对象的数据(如基本类型和其他Parcelable对象),使它们能够在不同的组件(如Activity、Service等)之间传递Parcel的主要作用不同的组件(如Activity、Service)之间需要传递数据。......
  • 我的新书《Android系统多媒体进阶实战》正式发售
    我的新书要正式发售了,把链接贴在下面,感兴趣的朋友可以支持下。❶发售平台:当当,京东,抖音北航社平台,小红书,b站❷目前当当和京东已开启预售❸当当网https://u.dangdang.com/KIDHJ❹京东商城https://item.m.jd.com/product/10109083199634.html?gx=RnAoqRAjajbdh8lR5Q&gxd......
  • Android开发 - Parcelable 接口实现不同组件之间传递数据解析
    什么是ParcelableParcelable是用于对象序列化的一种接口。通俗来讲,Parcelable允许将一个对象转化为一个字节流,这样你就可以将这个对象在不同的组件之间(如Activity、Service等)进行传递为什么需要Parcelable组件之间通信时(比如在两个Activity之间传递数据),传递的对象必......
  • Android经典实战之存储方案对比:SharedPreferences vs MMKV vs DataStore
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点在Android开发中,键值对存储(Key-ValueStorage)是一种经常用到的轻量级数据存储方案。它主要用于保存一些简单的配置数据或状态信息,例如用户设置、缓存数据等。常......
  • Android Audio分区——车载多区音频基础(一)
            AndroidAudio多区音频功能主要针对的是AndroidAutomotive这样的场景,它允许在同一个Android设备上支持多个独立的音频区域,每个区域可以有不同的音频输出设置。这种功能特别适用于汽车环境,因为车内通常有多个乘客,他们可能希望听不同的音频内容。一、概念......
  • Android Qcom USB Driver学习(十一)
    基于TI的FirmwareUpdate固件升级的流程分析usbapplictionlayers的数据USBProtocolPackage①/②maptocheckpasswordcorrectPackageFormat:Byte[0]=ReportIdByte[1]=ValidLength(0x21=33)Byte[2]=BSLCoreCommands(0x11RXPassword)Byte[3]=Val......
  • Android 常用的性能分析工具详解:GPU呈现模式
    此篇将重点介绍几种常用的Android性能分析工具:一、Logcat日志选取Tag=ActivityManager,可以粗略地知道界面Displaying的时间消耗。当我们打开一个Activity的时候,log会打印一串log如下:I/ActivityManager﹕Displayedxxx.xxx.xxx/TestActivity:+1s272ms(total+3s843ms)第一......
  • Android开发 - “效验和”效验数据在传输或存储过程中是否出错解析
    校验和的基本原理校验和的基本原理非常简单,就是把一组数据中的所有字节(或者其他单位)的数值相加,然后得到一个总和,这个总和就是所谓的“校验和”。在传输数据时,发送方会把数据和校验和一起发送出去;接收方收到数据后,也会计算一次校验和,然后与发送方提供的校验和进行比较。如果两个......