什麼是序列化:
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());
}
}
}
java 序列化作用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Spring中@Autowired註解、@Resource註解的區別
cucmber
2018-08-27 19:55:26
循環單鏈表--JAVA
雅希
2018-08-27 19:45:07
循環雙鏈表--JAVA
雅希
2018-08-27 19:45:06
Java 內存區域與內存溢出異常
wolf犭良
2018-08-27 19:44:20
基於JDK1.7Update14之後的HotSpot虛擬機垃圾收集器
wolf犭良
2018-08-27 19:44:19
轉一篇寫得不錯的J2EE簡介
kagami_QB
2018-08-27 19:38:14
JAVA 輸出 你 我 他
ycj170320
2018-08-27 19:34:26
JAVA 集合的使用
ycj170320
2018-08-27 19:34:25
類與對象 實驗一 機動車
ycj170320
2018-08-27 19:34:25
淺談Java中的Set、List、Map的區別
huxijiuhao
2018-08-27 19:33:14
九度online judge-A + B
huxijiuhao
2018-08-27 19:33:14
Mybatis源碼淺析、定製原理及方法
向ET同志学习
2018-08-27 19:32:39