本文首发于稀土掘金。该平台的作者 逐光而行 也是本人。
背景
安卓项目终于要到调用网络接口的时候了,之前了解到,需要对Java对象进行序列化操作,以json格式传入;接收的也是json并解析成Java对象。
之前还了解到,gson库可用来解析json串,在build.gradle里面implement一个serializable相关的插件可以使用@serializable。
但是今晚,突然发现有大佬的项目代码中,对象类
implements Parcelable
看上下代码逻辑,这个似乎就变成了可用的json格式!
于是上网查阅了相关资料,原来Parcelable也是一个序列化的接口。但两者略有不同。
两者简略对比
- Serializable代码少一些,创建和传输数据更容易,但是比Parcelable慢。
Serializable代码示例:
import java.io.Serializable;
class serializableObject implements Serializable {
String name;
public serializableObject(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Parcelable代码示例(摘自官方文档):
public class MyParcelable implements Parcelable {
private int mData;
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
}
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
private MyParcelable(Parcel in) {
mData = in.readInt();
}
}
- Serializable是Java语言本身支持的序列化方式,而Parcelable是安卓特有的。
- Serializable偏应用层,所以存储到设备或者需要网络通信传输的时候选Serializable更好;Parcelable原理机制偏底层,所以内存序列化时比较适合使用它。
- 同时与外界数据传输交互时不推荐使用Parcelable:因为Parcelable不太能保证数据传输的一致性(我的理解是:传回来的数据可能不是最初的数据)。
(注:虽然我并没有直接在官方文档找到这一段描述,而且很多给出出处链接的文章的链接都失效了,但是这么说的文章真的有很多篇,我暂且选择相信这个说法)
参考资料
- 安卓官方文档
- 各大博客文章