Android 序列化(Serializable和Parcelable),360°深入了解Flutter
在Android中,对象的序列化主要有两种方式:Serializable和Parcelable。
Serializable:
Serializable是Java提供的一个序列化接口,它是一个空接口,为对象提供序列化和反序列化的能力。实现了Serializable接口的类,可以被ObjectOutputStream转换为字节流,同时也可以被ObjectInputStream转换回对象。
public class User implements Serializable {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
// getters and setters
}
Parcelable:
Parcelable是Android提供的一种更高效的序列化方式,它适用于Android平台。实现Parcelable接口需要实现三个方法:writeToParcel、describeContents和CREATOR。其中,writeToParcel方法用于将对象写入到Parcel,describeContents返回当前对象扩展的本地对象的描述,CREATOR是一个静态成员变量,实现了Parcelable.Creator接口的对象。
public class User implements Parcelable {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
protected User(Parcel in) {
name = in.readString();
age = in.readInt();
}
public static final Creator<User> CREATOR = new Creator<User>() {
@Override
public User createFromParcel(Parcel in) {
return new User(in);
}
@Override
public User[] newArray(int size) {
return new User[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeString(name);
parcel.writeInt(age);
}
// getters and setters
}
在Flutter中,也有类似的序列化机制,主要是通过JSON来实现。Flutter提供了jsonEncode和jsonDecode两个方法来实现序列化和反序列化。
import 'dart:convert';
void main() {
var user = {'name': 'John', 'age': 30};
// 序列化
String json = jsonEncode(user);
print(json);
// 反序列化
Map<String, dynamic> userMap = jsonDecode(json);
print('${userMap['name']}, ${userMap['age']}');
}
在Flutter中,通常使用JSON来进行序列化和反序列化,因为它是跨平台的,并且大多数服务端框架(如Spring Boot)都支持JSON格式的数据。如果你需要和使用Android的Parcelable进行通信,你可能需要使用第三方库,如flutter\_parcelable,来帮助你在Flutter端实现Parcelable的功能。
评论已关闭