Java XML編碼器保存對象,XML編碼器已恢復
Java物件XML格式以下是一個示範如何保存資料的範例程式。
XML 輸出包含java.beans.XMLEncoder用這個。
還java.beans.XMLDecoder我們還將介紹一個使用此方法來還原已儲存物件的範例程式。
範例程式
- 宣告為私有的欄位會在定義 Getter 和 Setter 方法時儲存。
- 只有當變數發生變更時,才會儲存 XML 檔案。
- 您也可以指定要儲存的對象,例如 java.util.HashMap 或 java.util.ArrayList。這對於簡單地保存物件的狀態非常方便。
// 將位元組資料輸出到文件
fileStream = new FileOutputStream(path);
fileStream.write(xmlbuff);
fileStream.flush();
} 最後 {
如果 (enc != null) {
enc.close();
}
如果 (out != null) {
out.close();
}
如果 (fileStream != null) {
fileStream.close();
}
}
}
/**
* 從指定路徑 [path] 的 XML 檔案中還原物件。
* 必須使用 java.beans.XMLEncoder 儲存 XML 檔案。
* @param path 物件儲存的路徑。
* @throws FileNotFoundException
* 如果路徑名指定的檔案不存在
*/
public static Object readXML(String path) throws FileNotFoundException {
XML解碼器d = null;
嘗試 {
d = new XMLDecoder(new BufferedInputStream(
new FileInputStream(path));
返回 d.readObject();
} 最後 {
如果 (d != null) {
d.close();
}
}
}
*以下類別將用作要儲存的類別的範例。
執行結果
◆範例
// 從 XML 恢復 FreeSoft 類別實例
FreeSoft freeSoft2 = (FreeSoft)readXML(“C:\\FreeSoft.xml”);
System.out.println("軟體名稱:" + freeSoft2.getName());
System.out.println(“URL:”+freeSoft2.getUrl());
} catch (Exception e) {
e.printStackTrace();
}
}
◆輸出結果
軟體名稱:聊天和即時通訊!網址:https://chat-messenger.com/
◆C:\\FreeSoft.xml 的內容
使用該服務時需要注意的事項
雖然 java.beans.XMLEncoder 和 java.beans.XMLDecoder 類別很方便,但在 Chat&Messenger 的實際使用中,我們發現了一個極其罕見的問題,即當使用 java.beans.XMLEncoder 輸出 XML 時,檔案會變成 0 位元組。
讀取零位元組檔案會導致 ParseException 異常被記錄到「標準錯誤輸出」。
這是因為當建立 FileOutputStream 實例時,檔案會變成空。
我認為這是由於 Java 進程在創建 FileOutputStream 實例之後但在輸出 XML 資料之前關閉所造成的。
Chat&Messenger 正在透過建立備份檔案來解決這個問題,從而規避該問題。
