Ở 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!
Thầy ơi em chưa hiểu hàm DeserialObject, mỗi lần lưu một đối tượng xuống file sử dung hàm SerialObject chỉ có thể lưu một đối tượng này vì tạo ra một file mới như vậy không thể lưu nhiều đối tượng được, có phải DeserialObject của thầy khắc phục chổ này không. Em thường lưu xuống một list để dể dàng thêm nhiều đối tượng sau đó lại lưu list này xuông.
DeserialObject hàm này em không biết sử dụng thế nào thầy có thể giải thích và ví dụ rõ hơn chút về hàm này cho em được không, có thể em hiểu ý của thầy, cách này hay thầy chỉ cho em. Em cảm ơn thầy.
DeserialObject hàm này em không biết sử dụng thế nào thầy có thể giải thích và ví dụ rõ hơn chút về hàm này cho em được không, có thể em hiểu ý của thầy, cách này hay thầy chỉ cho em. Em cảm ơn thầy.
Em tạo 1 đối tượng, quản lý nó trong danh sách các đối tượng(là 1 đối tượng), các đối tượng lại có quan hệ với nhau,… cứ như thế ta tạo 1 tập các đối tượng và các đối tượng này được chứa trong 1 đối tượng lớn nhất – có thể gọi là database. Như vậy em serialize đối tượng database này xuống đĩa khi hoàn tất công việc. Khi bắt đầu công việc trở lại, bạn phải khôi phục lại cái database thế là xong. Phương thức deserialObject để khôi phục trở lại cái database mà bạn đã lưu trước đó.
No comments:
Post a Comment