Serializable
ใน Java มีระบบการเก็บ object ลงไฟล์และคืนรูปจากไฟล์อยู่แล้ว เรียกว่า Serializable
วิธีใช้ก็ง่ายๆ โง่ๆ เพียงแค่ implements Serializable
ในคลาสที่เก็บข้อมูล และใส่โค้ดนี้ลงไป
private static final long serialVersionUID = 1L;
ตัว 1L ก็คือเลข 1 ในชนิด long
นี่ล่ะ ที่ต้องใส่เพื่อบอกว่าขณะนี้ object ตัวนี้เป็นโปรแกรม version 1 อยู่ เมื่อเรามีการเปลี่ยนแปลงข้อมูลซะจนคิดว่าข้อมูลเดิมไม่น่าโหลดขึ้นแล้ว ก็ควรจะเปลี่ยนเลข 1 เป็นเลขอื่นๆ เพื่อบังคับไม่ให้ serializable โหลดข้อมูลเดิมออกมา (ไม่ต้องเป็นเลขเรียงกันก็ได้นะ)
ตัวอย่างเช่น
package object;
import java.io.Serializable;
public class Product implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private double price;
public Product(String name, double price){
this.name = name;
this.price = price;
}
public String getName(){
return this.name;
}
public double getPrice(){
return this.price;
}
public void setName(String name){
this.name = name;
}
public void setPrice(double price){
this.price = price;
}
}
Save
วิธีการเซฟไม่ยาก
import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
// ...
File file = new File("file.txt");
ObjectOutputStream writer = new ObjectOutputStream(new FileOutputStream(file));
writer.writeObject(data);
writer.close();
โดย data
ก็คือตัวแปรที่เก็บ object ตัวนั้นๆ ไว้
Load
วิธีการโหลดก็ไม่ยาก
import java.io.File;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
// ...
File file = new File("file.txt");
ObjectInputStream reader = new ObjectInputStream(new FileInputStream(file));
data = reader.readObject();
อย่าลืมแปลงกลับเป็น data type เดิม เช่น
Customer data = (Customer) reader.readObject();
ก็จะได้ object ที่มีค่าเหมือนตอนเซฟกลับคืนมาทุกประการ
Array
นอกจากนี้แล้ว primitive array (int[]
และคณะที่ใช้ []
สร้าง) หรือ ArrayList
ก็สามารถโยนเข้าไปใน writeObject
ได้เช่นเดียวกัน
Extending
กรณีคลาสที่ extend ต่อๆ กันมาอยู่ เช่น Stuff
ควรทำ implements Serializable
ในทุกคลาสที่เกี่ยวข้อง คือ Product
, ProductExt
และ Stuff