Object Serialization | Võ Văn Hải's Blog

Ở bài Các bước căn bản tạo đối tượng trong java, chúng ta đã nói cách tạo 1 danh sách các đối tượng. Ở bài Sử dụng text file để lưu trữ dữ liệu dạng CSDL chúng ta cũng nói về cách dùng TextFile lưu trữ danh sách các đối tượng nhưng cách này không được tốt bởi nó lưu trữ dạng text và việc khôi phục từng dòng text cũng như ký tự phân cách,… làm cho việc này chỉ là ở mức demo cho vui mà thôi. Java có 1 kỹ thuật rất hay dùng để serial 1 đối tượng bất kỳ và gửi xuống tập tin hoặc gửi qua mạng.

Giả sử chúng ta đã có lớp Thisinh.java và lớp Phongthi.java. Bây giờ chúng ta cần chỉnh sửa 1 vài vần đề nữa, cụ thể đó là:

  • Đối với các lớp cần serial, chúng ta phải cho lớp đó implements interface java.io.Serialiable.
  • Tạo 1 lớp chuyên dùng cho việc serial đối tượng với 2 phương thức SerialObject và DeserialObject.

Code cho lớp Thisinh.java

public class Thisinh implements java.io.Serializable{ //Các instatance data private String soBD; private String hoTen; private float diemToan; private float diemLy; private float diemHoa;…

}

Code cho lớp Phongthi.java

public class Phongthi implements java.io.Serializable{ private static final long serialVersionUID = 7576163164455567730L; //các thuộc tính của đối tượng phòng thi private String msPT; private String diachiPT; private int luongTS;…

}

Code cho lớp dùng để serial đối tượng, lớp MyDBengine.java

package serial;import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream;

public class MyDBengine { /** * Serial 1 đối tượng xuống file * @param fileName file chỉ định * @param h: đối tượng cần serial * @throws Exception */ public void SerialObject(String fileName, Object obj) throws Exception{ //Tạo luồng ghi file FileOutputStream fs=new FileOutputStream(fileName); //Tạo luồng để serial đối tượng ObjectOutputStream os=new ObjectOutputStream(fs); //chuyển tải đối tượng tới đích (tập tin) os.writeObject(obj); //đóng luồng fs.close();os.close(); } /** * Khôi phục(deserial) 1 đối tượng đã được serial trước đó * lên bộ nhớ. * @param fileName: file chỉ định * @return đối tượng đã được phục hồi * @throws Exception */ public Object DeserialObject(String fileName) throws Exception{ Object kp=null; //Tạo luồng đọc file đã được serial FileInputStream fi=new FileInputStream(fileName); //Tạo luồng để Deserialize đối tượng ObjectInputStream ois=new ObjectInputStream(fi); //Tiến hành khôi phục đối tượng kp=ois.readObject(); //đóng luồng fi.close();ois.close(); return kp; } }

Như vậy, với lớp này chúng ta có thể dùng nó cho các lần serial bất kỳ đối tượng nào xuống file.

Chúc các bạn thành công!

Share this:

  • Facebook
  • X
Like Loading...

Từ khóa » Ghi đối Tượng Ra File Trong Java