天天看點

Android --Serializable 執行個體

這篇是一個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);
    }
  }

}