详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt271

1 xStream框架 
xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换; 
官网: 
http://xstream.codehaus.org/ 
2 about xtream 
xtream  是一个简单的工具包,用来把对象序列化成xml配置文件,并且也可以把xml反序化成对象。 
4Features 功能特点 
简单易用,不需要配置映射,速度快并且占用内存小,生成的xml配置文件很干净,不带额外无用信息,这样在反映序列化的时候容易读取。不需要修改序列化对象的类型。支持类图。与xmlapi 整合。详细的返回错误信息。可修改的输出 显示。 
4 点型应用 
传输:网络传输 
持久化:生成的XML可以写到文件,做持久化。 
配置:XML最常用的配置文件。 
单元测试 
5局限 
If using the enhanced mode, XStream can re-instantiate classes that do not have a default constructor. However, if using a different JVM like an old JRockit version, a JDK 1.3 or you have restrictions because of a SecurityManager, a default constructor is required. 
The enhanced mode is also necessary to restore final fields for any JDK < 1.5. This implies deserialization of instances of an inner class. 
Auto-detection of annotations may cause race conditions. Preprocessing annotations is safe though. 

6准备一个pojo对象

Java代码

  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    package com.entity;  
    import java.util.Date;  
    bpublic class Student {  
        private int id;  
        private String name;  
        private String email;  
        private String address;  
        private Birthday birthday;  
        private Date registDate;  
           
        public Date getRegistDate() {  
            return registDate;  
        }  
       
        public void setRegistDate(Date registDate) {  
            this.registDate = registDate;  
        }  
         public int getId() {  
            return id;  
        }  
         public void setId(int id) {  
            this.id = id;  
        }  
         public String getName() {  
            return name;  
        }  
         public void setName(String name) {  
            this.name = name;  
        }  
         public String getEmail() {  
            return email;  
        }  
         public void setEmail(String email) {  
            this.email = email;  
        }  
         public String getAddress() {  
            return address;  
        }  
         public void setAddress(String address) {  
            this.address = address;  
        }  
         public Birthday getBirthday() {  
            return birthday;  
        }  
         public void setBirthday(Birthday birthday) {  
            this.birthday = birthday;  
        }  
       
        // getter、setter  
        public String toString() {  
            return this.name + "#" this.id + "#" this.address + "#"  
                    this.birthday + "#" this.email;  
        }  
    }

7 bean 转成 xml 

测试代码:

Java代码

  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    package com.test;  
       
    import java.io.ObjectInputStream;  
    import java.io.ObjectOutputStream;  
    import java.util.Date;  
    import org.junit.Before;  
    import org.junit.Test;  
    import com.entity.Birthday;  
    import com.entity.Student;  
    import com.thoughtworks.xstream.XStream;  
       
    @SuppressWarnings("unchecked")  
    public class XStreamTest {  
       
        private XStream xstream = null;  
        private ObjectOutputStream out = null;  
        private ObjectInputStream in = null;  
        private Student bean = null;  
       
        @Before  
        public void init() {  
            try {  
                xstream = new XStream();  
                bean = getTestStudent();  
                // xstream = new XStream(new DomDriver()); // 需要xpp3 jar  
            catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
       
        public static void main(String[] args) {  
            XStreamTest test = new XStreamTest();  
            test.init();  
            test.testWriteBean2XML_01();  
        }  
       
        public final void fail(String string) {  
            System.out.println(string);  
        }  
       
        public final void failRed(String string) {  
            System.err.println(string);  
        }  
       
        /** 
         * bean 2 XML 
         * */  
        @Test  
        public void testWriteBean2XML_01() {  
            try {  
                fail("------------Bean->XML------------");  
                fail(xstream.toXML(bean));  
            catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
       
        /** 
         * 类重命名后的XML 
         * */  
        @Test  
        public void testWriteBean2XML_02() {  
            try {  
                fail("-----------类重命名后的XML------------");  
                // 类重命名  
                xstream.alias("student", Student.class);  
                xstream.aliasField("生日", Student.class"birthday");  
                xstream.aliasField("生日日期", Birthday.class"birthday");  
                fail(xstream.toXML(bean));  
            catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
       
        /** 
         * 类重命名后的XML 
         * */  
        @Test  
        public void testWriteBean2XML_03() {  
            try {  
                fail("-----------属性重命名后的XML------------");  
                // 属性重命名  
                xstream.aliasField("邮件", Student.class"email");  
                fail(xstream.toXML(bean));  
            catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
       
        /** 
         * 包重命名后的XML 
         * */  
        @Test  
        public void testWriteBean2XML_04() {  
            try {  
                fail("-----------包重命名后的XML------------");  
                //包重命名  
                xstream.aliasPackage("modile""com.entity");  
                fail(xstream.toXML(bean));  
            catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
       
        /** 
         * 构造数据 
         * */  
        private Student getTestStudent() {  
            Student bean = new Student();  
            bean.setAddress("china");  
            bean.setEmail("email");
            bean.setId(1);  
            bean.setName("jack");  
            Birthday day = new Birthday();  
            day.setBirthday("2010-11-22");  
            bean.setBirthday(day);  
            bean.setRegistDate(new Date());  
            return bean;  
        }  
    }

测试结果: 
------------Bean->XML------------

1
2
3
4
5
6
7
8
9
10
<com.entity.Student
  <id>1</id
  <name>jack</name
  <email>email</email
  <address>china</address
  <birthday
    <birthday>2010-11-22</birthday
  </birthday
  <registDate>2011-07-11 22:33:02.359 CST</registDate
</com.entity.Student>

-----------类重命名后的XML------------

1
2
3
4
5
6
7
8
9
10
<student
  <id>1</id
  <name>jack</name
  <email>email</email
  <address>china</address
  <生日> 
    <生日日期>2010-11-22</生日日期> 
  </生日> 
  <registDate>2011-07-11 22:33:02.390 CST</registDate
</student>

-----------属性重命名后的XML------------

1
2
3
4
5
6
7
8
9
10
<com.entity.Student
  <id>1</id
  <name>jack</name
  <邮件>email</邮件> 
  <address>china</address
  <birthday
    <birthday>2010-11-22</birthday
  </birthday
  <registDate>2011-07-11 22:33:02.406 CST</registDate
</com.entity.Student>

-----------包重命名后的XML------------

1
2
3
4
5
6
7
8
9
10
<modile.Student
  <id>1</id
  <name>jack</name
  <email>e</email
  <address>china</address
  <birthday
    <birthday>2010-11-22</birthday
  </birthday
  <registDate>2011-07-11 22:33:02.406 CST</registDate
</modile.Student>

8 List 2 XML

Java代码  

  1. 1
    2
    3
    4
    5
    6
    7
    fail("------------Listg<Strudent>->XML------------");  
    List<Student> list = new ArrayList<Student>();  
    list.add(bean);  
    Student s1 = getTestStudent();  
    s1.setId(2);  
    list.add(s1);  
    fail(xstream.toXML(list));

结果: 
------------Listg<Strudent>->XML------------

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<list
  <com.entity.Student
    <id>1</id
    <name>jack</name
    <email>email</email
    <address>china</address
    <birthday
      <birthday>2010-11-22</birthday
    </birthday
    <registDate>2011-07-11 22:47:08.0 CST</registDate
  </com.entity.Student
  <com.entity.Student
    <id>2</id
    <name>jack</name
    <email>email</email
    <address>china</address
    <birthday
      <birthday>2010-11-22</birthday
    </birthday
    <registDate>2011-07-11 22:47:08.0 CST</registDate
  </com.entity.Student
</list>

 

最新文章

  1. RSA非对称加密,使用OpenSSL生成证书,iOS加密,java解密
  2. 【leetcode】Binary Tree Maximum Path Sum (medium)
  3. 禁用SettingSyncHost.exe
  4. Spring事务管理 -- 挺好
  5. 如何监控业务的响应速度?Cloud Insight SDK 实践分享
  6. SQLite使用教程4 附加数据库
  7. leecode 每日解题思路 64 Minimum Path Sum
  8. CSS小注意(初级)
  9. kaggle之识别谷歌街景图片中的字母
  10. PHP curl之爬虫初步
  11. I’m stuck!
  12. php 日期处理 例子
  13. 地理位置 API
  14. ThreadLocal的理解与应用场景分析
  15. springMVC源码分析--ControllerClassNameHandlerMapping(九)
  16. Linux编译静态库与共享库
  17. easyUI基础入门
  18. monit安装配置
  19. 51nod 1682 中位数计数(前缀和)
  20. Git 个人笔记

热门文章

  1. linux下怎么卸载自带的JDK和安装想要的JDK
  2. Docker Registry
  3. 感知器算法--python实现
  4. C#之异步
  5. swift UITextView内容距离边框边距设置
  6. Python数据可视化Matplotlib——Figure画布背景设置
  7. LoadRunner入门(二)
  8. code_smith生成实体类
  9. 配置AIX系统互信关系
  10. 解读 Vue 之 Reactive