Serializable與Parcelable的序列化與反序列化
- Serializable的介紹
- Serializable的序列化
- Serializable的反序列化
- Parcelable的介紹
- 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();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/266403.html
標籤:其他
