Serializable与Parcelable的序列化与反序列化
Serializable的介绍
Serializable是JAVA提供的一个空接口,为对象提供标准的序列化与反序列化。
我们实现Serializable接口,需要让一个实体类实现此接口,并声明一个SerialVersionUID,其实SerialVersionUID并不是必须的,如果不指定SerialVersionUID也会反序列化成功,如果你修改其中的成员变量,并且没有声明SerialVersionUID那么就会反序列化失败。
Serializable的序列化
public void Write(){
//Serializable序列化
User user = new User();
user.setName("Liszt");
user.setAge(19);
ObjectOutputStream outputStream = null;
try{
//创建一个文件用于储存信息
outputStream = new ObjectOutputStream(new FileOutputStream("text.txt"));
//把User对象写入
outputStream.writeObject(user);
outputStream.close();
}catch (Exception e) {
e.printStackTrace();
}
}
Serializable的反序列化
public void Read(){
//Serializable反序列化
ObjectInputStream inputStream = null;
try{
//读取文件数据
inputStream = new ObjectInputStream(new FileInputStream("text.txt"));
User Newuser = (User) inputStream.readObject();
}catch (Exception e){
e.printStackTrace();
}
}
实体类User
public class User implements Serializable{
//public static final long serialVersionUID = 1L;
public String name;
public int age;
public User(String name,int age){
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
Parcelable的介绍
Parcelable是android提供的序列化接口,使用起来比Serializable稍微麻烦一点,但效率高。
Parcelable的序列化与反序列化
public class User implements Parcelable {
//public static final long serialVersionUID = 1L;
public String name;
public int age;
public User(String name,int age){
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
//当对象存在文件描述符时返回一,几乎大部分情况都返回0
@Override
public int describeContents() {
return 0;
}
//序列化
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
}
//反序列化
public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>(){
//创建反序列化对象
@Override
public User createFromParcel(Parcel source) {
return new User(source);
}
//创建反序列化数组
@Override
public User[] newArray(int size) {
return new User[size];
}
};
//读取数据
public User(Parcel in){
name = in.readString();
age = in.readInt();
}
}