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

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 就像给对象“拍照”和“复原”的工具,让你可以把对象保存下来,传到另一台电脑上,或者下次打开再恢复成原来的样子

posted @ 2024-08-29 14:46  阿俊学JAVA  阅读(28)  评论(0编辑  收藏  举报