java 序列化作用

什麼是序列化:

1.序列化就是將一個對象的狀態(各個屬性量)保存起來,然後在適當的時候再獲得。
序列化分爲兩大部分:序列化和反序列化。序列化是這個過程的第一部分,將數據分解成字節流,以便存儲在文件中或在網絡上傳

輸。反序列化就是打開字節流並重構對象。對象序列化不僅要將基本數據類型轉換成字節表示,有時還要恢復數據。恢復數據要求

有恢復數據的對象實例;

2.java對象序列化不僅保留一個對象的數據,而且遞歸保存對象引用的每個對象的數據。可以將整個對象層次寫入字節流中,可以保

存在文件中或在網絡連接上傳遞。利用對象序列化可以進行對象的"深複製",即複製對象本身及引用的對象本身。序列化一個對象

可能得到整個對象序列。

序列化的特點是什麼:
如果某個類能夠被序列化,其子類也可以被序列化。

(二)序列化前提:

(1)要序列化對象必須是可序列化的,即必須實現 Serializable 接口。

(2)要序列化對象的屬性也都是可序列化的。

(3)要序列化對象引用的對象也必須是可序列化的,如:要序列化一個 HashMap 實例,需要把放入到HashMap中的對象也都序列化



(4)要序列化一個內部類,該內部類必須可序列化,並且外部類也必須可序列化。

(5)基本數據類型都是可以序列化的。

示例如下:用於將序列化對象存儲到文件中,及從文件中對讀取對象

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class User implements Serializable {

public String name; // 姓名
public int age; // 年齡

public User(){}
public User(String name, int age) {// 有參構造
this.name = name;
this.age = age;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}


/**
* @todo 將一個可以序列化的對象寫入文件
* @param obj 要保存的對象
* @param fileName 目標文件
*/
public void writeToFile(Object obj, String fileName) {

try {
FileOutputStream fos = new FileOutputStream(fileName);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(obj);
oos.flush();
System.out.println("write ok");
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* @param fileName
* 保存對象的文件
* @return 從文件中得到的對象
*/
public Object getObjFromFile(String fileName) {
Object obj = null;
try {
System.out.println("*********"+fileName);
FileInputStream fis = new FileInputStream(fileName);
ObjectInputStream ois = new ObjectInputStream(fis);
obj = ois.readObject();
System.out.println("read ok..");
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}

public static void main(String[] args) {
String fileName = "c:\\user.txt"; // 保存對象的文件
List<User> l = new ArrayList<User>();
for (int i = 0; i < 5; i++) {
User user = new User("中國人民共和國"+(i+1), 28+i);
l.add(user);
}
User user = new User(); // 創建一個User對象
user.writeToFile(l, fileName); // 將對象寫入文件
List<User> ul = (List<User>)(user.getObjFromFile(fileName)); // 從文件中取得對象

if (ul != null)
//System.out.println("get user from file ok,and name is : "); // 輸出對象名
for (Iterator iter = ul.iterator(); iter.hasNext();) {
User u = (User) iter.next();
System.out.println("......userName.........."+u.getName()+"---------"+u.getAge());
}
}

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章