1. Serializable
这个接口仅仅是一个标记(没有抽象方法的接口),不需要重新定义什么。
2. Parcelable
一个拥有抽象方法的接口。实现时,你需要重新定义所有的抽象方法,指定需要写入/读取哪些字段以及它们的顺序(通常Android Studio可以自动生成)。
实际上很少有人在Kotlin中编写Parcelable代码。为此,Kotlin提供了一个特殊的注解,它使得该接口的实现将会被自动生成。要使用它,你需要添加一个特殊的插件。
你不必担心实现方法,只需要实现 Parcelable 接口并添加 @Parcelize 注解就可以了。
这样,一切都会很好,实现速度也很快!
结果
与 Serializable 相比,实现 Parcelable 接口的过程更快。
Parcelable比Binder中的Serializable快得多,因为Serializable使用反射并导致许多垃圾收集。Parcelable旨在优化传递对象。
这里是参考链接。 http://www.developerphil.com/parcelable-vs-serializable/
我回答晚了,但是希望这篇文章能对其他人有所帮助。
就速度而言,Parcelable > Serializable
。但是,自定义的Serializable是个例外。它几乎与Parcelable相当甚至更快。
参考: https://www.geeksforgeeks.org/customized-serialization-and-deserialization-in-java/
示例:
要序列化的自定义类
class MySerialized implements Serializable {
String deviceAddress = "MyAndroid-04";
transient String token = "AABCDS"; // sensitive information which I do not want to serialize
private void writeObject(ObjectOutputStream oos) throws Exception {
oos.defaultWriteObject();
oos.writeObject("111111" + token); // Encrypted token to be serialized
}
private void readObject(ObjectInputStream ois) throws Exception {
ois.defaultReadObject();
token = ((String) ois.readObject()).subString(6); // Decrypting token
}
}
Serializable
Serializable是一个可标记的接口,或者我们可以称之为空接口。它没有任何预先实现的方法。Serializable将要把一个对象转换成字节流,因此用户可以在一个活动和另一个活动之间传递数据。Serializable的主要优点是创建和传递数据非常容易,但与Parcelable相比,速度较慢。
Parcelable
Parcelable比Serializable更快。Parcelable将对象转换为字节流并在两个活动之间传递数据。编写Parcelable代码比序列化略微复杂。在两个活动之间传递数据时,它不会创建更多的临时对象。
Parcelable 可以将对象转换为字节流,在 Android 中在进程之间传递对象。
序列化将 POJO 转换为字符串(JSON 字符串),并可用于跨平台传输对象信息。