2011-05-24 19 views
0

我一直在使用xstream來序列化名稱和描述(和其他字段)的對象。XStream生成巨大的隨機字符串

class MyClass { 
    String name; 
    String description; 
    .... 
    MyClass(String name, String description) { 
    this.name = name; 
    this.description = description; 
    } 
} 

序列化的文件出來巨大,現場充滿了垃圾字符重量(MB)數百MB:

<myclass> 
<name>Name</name> 
<description>My name is ??sA¬A.A¡Aƒ?'A¢?,¬?¡Aƒ??sA,A¢Aƒ?'A+??TAƒ?? A¢?,¬?,¢Aƒ?'A¢?,¬A AƒA¢A¢??sA¬A¢??zA¢Aƒ?'A+??TAƒA¢A¢? 
A,A¢Aƒ?'A,A¢AƒA¢A¢?,¬?¡A,A¬Aƒ??▌A,A¡Aƒ?'A¢?,¬?¡Aƒ??sA,A¬Aƒ?'A+??TAƒA¢A¢??sA¬A,A▌Aƒ?'A¢?,¬?¡Aƒ??s 
?'A¢?,¬?¡Aƒ??sA,A¬Aƒ?'A+??TAƒ?? A¢?,¬?,¢Aƒ?'A¢?,¬A AƒA¢A¢??sA¬A¢??zA¢Aƒ?'A+??TAƒ??sA,A¢Aƒ?'A,A¢A 
A,A¬Aƒ??▌A,A¡Aƒ?'A+??TAƒA¢A¢??sA¬A.A¡Aƒ?'A¢?,¬?¡Aƒ??sA,A¡Aƒ?'A+??TAƒ?? A¢?,¬?,¢Aƒ?'A¢?,¬A AƒA¢A¢ 
ƒ?? A¢?,¬?,¢Aƒ?'A,A¢AƒA¢A¢?,¬?¡A,A¬Aƒ??sA,A Aƒ?'A+??TAƒ??sA,A¢Aƒ?'A,A¢AƒA¢A¢??sA¬A.A¡Aƒ??sA,A¬Aƒ 
'A+??TAƒA¢A¢??sA¬A.A¡Aƒ?'A¢?,¬?¡Aƒ??sA,A¢Aƒ?'A+??TAƒ?? A¢?,¬?,¢Aƒ?'A¢?,¬?¡Aƒ??sA,A¢Aƒ?'A+??TAƒ??</name></myclass> 
+2

我的猜測此舉是你有了達夫數據你的實例。如果您不相信這種情況,請出示一個簡短但完整的程序來說明問題。 – 2011-05-24 14:37:09

+0

對象是如何構造的? 「description」數據來自哪裏? – 2011-05-24 15:33:02

+0

@jon什麼是「duff數據」? @jim - 這是一個簡單的setter - 接收字符串的getter – Yossale 2011-05-24 15:59:50

回答

0

這個問題似乎是一個不好的編碼問題。

XStream不支持特定的編碼(每個對象都使用它定義的編碼編寫)。發生在我們身上的是某些字符以錯誤的格式編碼,然後以錯誤的格式讀取 - 所以每次(我們不知道如何)每個字符都會有2個「垃圾」字符。因此,與每次保存/負載的尺寸已經成倍翻番......

解決的辦法是從

XStream xstream = new XStream(); 
xstream.toXML(obj); 

XStream xstream = new XStream(); 
Writer out = new BufferedWriter(new OutputStreamWriter(output, "UTF8")); 
xstream.toXML(tax, out);