2011-05-24 17 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);