笨笨
独学而无友,则孤陋而寡闻
XStream比较小巧,用起来属于最快上手的,但是遇到几个问题:
1.
自己写的Java枚举类型没有支持,序列化和反序列化出来的都是毫无意义的枚举值。


2.
如果在序列化的内容中是含有xml的实体,xstream默认采用实体转化,而不是cdata。

3.
续问题2,如果序列化的内容中含有\n \r之类的信息,在反序列化的时候这种换行符丢失。
第三个问题已经解决,xstream本身不会存在这个问题,因为我采用了一种比较取巧的办法,只有list里面的内容我是每次append到file里面,读的时候我又把file读进来加头加尾,我readfile的部分写的不好,本身就已经把换行丢了,例如:
 1 public class TestXStreamLoader {
 2 
 3     //~ Instance fields ========================================================
 4 
 5     private final String xmlHeader = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><list>";
 6     private final String xmlFooter = "</list>";
 7     private final String fileName = "/src/test/contents.txt";
 8 
 9     //~ Methods ================================================================
10 
11     public static void main(String[] args) throws IOException {
12 
13         ArrayList list = new TestXStreamLoader().loadResults();
14         System.out.println(list.size());
15     }
16 
17     public ArrayList loadResults() throws IOException {
18 
19         XStream xstream = new XStream();
20         xstream.alias("list", ArrayList.class);
21 
22         ArrayList results = (ArrayList) xstream.fromXML(this.getResultString(fileName));
23 
24         return results;
25     }
26 
27     private String getResultString(String fileName) throws IOException {
28 
29         BufferedReader in = new BufferedReader(new FileReader(fileName));
30         StringBuffer sbuf = new StringBuffer();
31         String str = null;
32         sbuf.append(this.xmlHeader);
33 
34         while ((str = in.readLine()) != null) {
35 
36             sbuf.append(str);
37             sbuf.append("\n");
38         }
39 
40         in.close();
41         sbuf.append(this.xmlFooter);
42 
43         return sbuf.toString();
44     }
45 }


注意加色的那句就帮我完成了这个bug fix的工作,这下不用急着去看xstream的源代码了,至于不用CDATA嘛,也还可以接受。
至于第一个,我还不想自己写Mapper,只好辛苦一下代码,弄点bad smell进去了。:-)
posted on 2005-11-09 10:49  笨笨  阅读(2971)  评论(1编辑  收藏  举报