ชวา XMLEncoderบันทึกวัตถุXMLConcoderบูรณะแล้ว
ชวาด้วยวัตถุรูปแบบ XMLนี่คือโปรแกรมตัวอย่างที่แสดงวิธีการบันทึกข้อมูล
เอาต์พุต XML ประกอบด้วยjava.beans.XMLEncoderใช้สิ่งนี้
อีกด้วยjava.beans.XMLDecoderนอกจากนี้ เราจะนำเสนอโปรแกรมตัวอย่างที่ใช้วิธีนี้ในการกู้คืนวัตถุที่บันทึกไว้
ตัวอย่างโปรแกรม
- ฟิลด์ที่ประกาศเป็น private จะถูกบันทึกไว้เมื่อมีการกำหนดเมธอด Getter และ Setter
- ไฟล์ XML จะถูกบันทึกก็ต่อเมื่อมีการเปลี่ยนแปลงตัวแปรเท่านั้น
- นอกจากนี้ คุณยังสามารถระบุอ็อบเจ็กต์ที่จะบันทึกได้ เช่น java.util.HashMap หรือ java.util.ArrayList ซึ่งสะดวกสำหรับการบันทึกสถานะของอ็อบเจ็กต์โดยตรง
// ส่งออกข้อมูลไบต์ไปยังไฟล์
fileStream = new FileOutputStream(path);
fileStream.write(xmlbuff);
fileStream.flush();
} ในที่สุด {
ถ้า (enc != null) {
enc.close();
}
ถ้า (out != null) {
ปิดออก();
}
ถ้า (fileStream != null) {
fileStream.close();
}
}
}
/**
* กู้คืนวัตถุจากไฟล์ XML ที่อยู่ในพาธที่ระบุ [path]
* ไฟล์ XML ต้องบันทึกโดยใช้ java.beans.XMLEncoder
* @param path เส้นทางที่เก็บอ็อบเจ็กต์ไว้
* @throws FileNotFoundException
* หากไฟล์ที่ระบุโดยชื่อพาธไม่มีอยู่จริง
*/
public static Object readXML(String path) throws FileNotFoundException {
XMLDecoder d = null;
พยายาม {
d = new XMLDecoder(new BufferedInputStream(
สร้าง FileInputStream ใหม่ (path));
คืนค่า d.readObject();
} ในที่สุด {
ถ้า (d != null) {
d.close();
}
}
}
*ต่อไปนี้จะใช้คลาสเป็นตัวอย่างในการบันทึกคลาส*
ผลลัพธ์การดำเนินการ
◆ตัวอย่าง
// กู้คืนอินสแตนซ์คลาส FreeSoft จากไฟล์ XML
FreeSoft freeSoft2 = (FreeSoft)readXML(“C:\\FreeSoft.xml”);
System.out.println("ชื่อซอฟต์แวร์: " + freeSoft2.getName());
System.out.println(“URL:”+freeSoft2.getUrl());
} catch (Exception e) {
e.printStackTrace();
}
}
◆ผลลัพธ์
ชื่อซอฟต์แวร์: Chat & Messenger แชทและส่งข้อความ! URL: https://chat-messenger.com/
◆เนื้อหาของไฟล์ C:\\FreeSoft.xml
ข้อควรทราบเมื่อใช้บริการนี้
แม้ว่าคลาส java.beans.XMLEncoder และ java.beans.XMLDecoder จะสะดวก แต่ในการใช้งานจริงกับ Chat&Messenger เราพบปัญหาที่เกิดขึ้นได้ยากมาก คือไฟล์จะมีขนาด 0 ไบต์เมื่อส่งออกเป็น XML โดยใช้ java.beans.XMLEncoder
การอ่านไฟล์ที่มีขนาดศูนย์ไบต์จะส่งผลให้เกิดข้อผิดพลาด ParseException ซึ่งจะถูกบันทึกไว้ใน "เอาต์พุตข้อผิดพลาดมาตรฐาน"
เนื่องจากไฟล์จะว่างเปล่าเมื่อมีการสร้างอินสแตนซ์ FileOutputStream ขึ้นมา
ผมเชื่อว่าปัญหานี้เกิดขึ้นเมื่อกระบวนการ Java ปิดตัวลงหลังจากสร้างอินสแตนซ์ FileOutputStream แต่ก่อนที่จะส่งออกข้อมูล XML
Chat&Messenger กำลังแก้ไขปัญหานี้โดยการสร้างไฟล์สำรองเพื่อหลีกเลี่ยงปัญหาดังกล่าว
