XStream的几个问题

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进去了。:-)

转载于:https://www.cnblogs.com/kapok/archive/2005/11/09/272132.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值