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 的优缺点
-
优点:
- 简单易用:只需要实现 Serializable 接口,不需要额外的代码或方法
- Java 原生支持:Serializable 是 Java 自带的接口,不需要依赖第三方库
-
缺点:
-
性能不如 Parcelable 高效:Serializable 使用反射(reflection)机制,效率较低,尤其是在 Android 中,Parcelable 更推荐使用
-
占用更多内存:序列化的对象会占用更多的内存空间
-
总结
-
Serializable 是 Java 提供的一种序列化接口,用于将对象转换为字节流,方便存储和传输
-
使用非常简单:类只需要实现 Serializable 接口即可
-
适合简单对象传输:但在 Android 中,Parcelable 是一个更高效的替代方案,特别是在大量对象传输时
-
通俗来说,Serializable 就像给对象“拍照”和“复原”的工具,让你可以把对象保存下来,传到另一台电脑上,或者下次打开再恢复成原来的样子