這篇是一個Serializable的一個例子。Android 主要用 Serializable 和 Parcelable 來實作對象的序列化。
需要說明的是如果Person 是内部類,需要加上Static 屬性;不然會提示 Person沒有序列化。
同時因為 Serializable 接口使得類不容易維護。可以參看 Effect java 相關章節。
package com.serializabletest;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.io.StreamCorruptedException;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.View;
public class MainActivity extends Activity {
public static final String TAG = "MainActivity";
/** 序列化測試
* @see android.app.Activity#onCreate(android.os.Bundle)
*/
private final String objName = "/mnt/sdcard/object.txt";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle("通過實作 Serializable 接口來實作對象序列化");
setContentView(R.layout.activity_main);
}
public void writePerson(View view) throws FileNotFoundException,
IOException {
Person person = new Person(1, "張三", 20);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(
objName));
oos.writeObject(person);
oos.flush();
oos.close();
person.printPerson();
}
public void readPerson(View view) throws StreamCorruptedException,
FileNotFoundException, IOException, ClassNotFoundException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
objName));
Person person = (Person) ois.readObject();
ois.close();
person.printPerson();
}
static class Person implements Serializable {
private static final long serialVersionUID = 1L;
int ID;
String Name;
int age;
public Person(int ID, String Name, int age) {
this.ID = ID;
this.Name = Name;
this.age = age;
}
public void printPerson() {
Log.d(TAG, "ID:" + ID);
Log.d(TAG, "Name:" + Name);
Log.d(TAG, "age:" + age);
}
}
}