XStream 是 ThoughtWorks 開源產品,採用 XPP 進行 XML 與物件互轉,無需 Schema 或 Mapping 檔即可運作,API 簡潔且擴充性強。JSON 則是當前輕量級資料交換主流,常用於 AJAX 與 Web Service,Java 領域有 JSON-lib 與 XStream JSON (Jettison) 兩大實作。本文針對三者進行資料長度與轉換效能 (100 萬次迴圈) 實測比較。
public class Employee {
private String name;
private int age;
private Address address;
private double salary;
private boolean isActive;
private char sexy;
// getter/setter 略
}
public class Address {
private String street;
private String country;
private String city;
private String doorNum;
private String empName;
// getter/setter 略
}
| 方式 | 長度 (字元) | 輸出格式範例 |
|---|---|---|
| XStream (XML) | 328 | <com.ldd600.ws.Employee><name>gavin</name>...</com.ldd600.ws.Employee> |
| JSON-lib | 170 | {"address":{"doorNum":"789","empName":"gavin",...},"age":0,...} |
| XStream JSON (Jettison) | 183 | {"employee":{"name":"gavin","age":0,"address":{...},...}} |
| 方式 | 耗時 (ms) |
|---|---|
| JSON-lib | 185,638 |
| XStream XML | 247,863 |
| XStream JSON | 395,624 |
結論:XStream XML 比 JSON-lib 慢約 62 秒;XStream JSON 比 XStream XML 再慢約 147 秒。
JsonConfig 解決循環引用問題;Jettison 適合 XML↔JSON 互轉。"" 而非 null),消費其他工具產出的 JSON 可能出錯。<employee reference="../.."/>)。new XStream().toXML(obj) / fromXML(xml)。專案需設計通用 Web Service Agent,參數可能互相引用,考量可讀性與擴充性,最終採用 XStream 作為預設序列化方案。