對象的序列化與反序列化.
序列化:把Java對象轉換爲字節序列的過程.
反序列化:把字節序列恢復爲Java對象的過程.
將對象數據寫入文件並讀取案例:
工程創建com.test.serial 2個工程文件Goods.java / GoodsTest.java
Goods.java
package com.test.serial;
import java.io.Serializable;
public class Goods implements Serializable{
private String goodsId;
private String goodsName;
private double price;
//構造方法
public Goods(String goodsId, String goodsName, double price) {
this.goodsId = goodsId;
this.goodsName = goodsName;
this.price = price;
}
//getter setter
public String getGoodsId() {
return goodsId;
}
public void setGoodsId(String goodsId) {
this.goodsId = goodsId;
}
public String getGoodsName() {
return goodsName;
}
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
//toString
@Override
public String toString() {
return "商品信息 [編號:" + goodsId + ", 名稱:" + goodsName + ", 價格:" + price + "]";
}
}
GoodsTest.java
package com.test.serial;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class GoodsTest {
public static void main(String[] args) {
// 定義Goods類對象
Goods goods1 = new Goods("gd0001","電腦",3000);
try {
//先創建文件對象
FileOutputStream fos = new FileOutputStream("test1.txt");
//文件對象輸出流 綁定 文件對象
ObjectOutputStream oos = new ObjectOutputStream(fos);
//將對象信息寫入文件
oos.writeObject(goods1);
oos.flush();
fos.close();
oos.close();
//去讀創建好的文件
FileInputStream fis = new FileInputStream("test1.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
try {
Goods goods =(Goods) ois.readObject();//返回值是Object需要強制轉換
System.out.println(goods); //直接輸出類的對象即可
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
fis.close();
ois.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}