码迷,mamicode.com
首页 > 编程语言 > 详细

XStream--java对象与xml形式文件相互转换

时间:2018-02-13 16:42:49      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:sys   时区   shanghai   2.3   相互   asi   not   void   return   

1.pom.xml中添加依赖

<dependency>
            <groupId>com.thoughtworks.xstream</groupId>
            <artifactId>xstream</artifactId>
            <version>1.4.7</version>
        </dependency>

2.创建xmlUtil类,并对XStream配置

  2.1 解决双下划线:XStream把对象中的属性如person_name转成xml格式时会出现<person__name>,这种双下划线

    此时用这种方式可以将双下划线代替成单下划线

//解决双下划线
    public static final XmlFriendlyNameCoder nameCoder = new XmlFriendlyNameCoder("-_", "_");

  2.2 编码格式:

// 编码格式
    private static final String ENCODING = "UTF-8";

  2.3 使用dom解析方式

 // dom解析驱动
    private static final DomDriver fixDriver = new DomDriver(ENCODING, nameCoder);

  2.4 通用解析器,把配置都放到XStream对象中

 // 通用解析器
    public static final XStream XSTREAM = new XStream(fixDriver);

  2.5 对象中有日期注意时区处理

//时区
    private static final String CHINA_TIME_ZONE = "Asia/Shanghai";

  2.6 初始化XStream

 static {
        // 时区处理
        TimeZone zone = TimeZone.getTimeZone(CHINA_TIME_ZONE); //获得时区
        XSTREAM.registerConverter(new DateConverter(zone), XStream.PRIORITY_NORMAL);
        XSTREAM.autodetectAnnotations(true); //开启序列化的注解形式
        XSTREAM.setMode(XStream.NO_REFERENCES);//取消引用,如果没有这一步,会出现xml引用格式reference

    }

3. XStream的方法

  3.1 报文转对象

public static Object fromXML(String xml) {
        Object target = null;
        XStream xstream = XSTREAM;
        xstream.processAnnotations(AllCase.class);//开启此类的解析,否则无法解析
        try {
            target = xstream.fromXML(xml);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return target;
    }

  3.2 对象转报文

public static String toXML(Object obj) {
        XStream xstream = XSTREAM;
        String xml= xstream.toXML(obj);
        return xml;
    }

  3.3 文件流转对象

public static Object fromXML(InputStream in) {
        Object target = null;
        XStream xstream = XSTREAM;
        xstream.processAnnotations(AllCase.class);
        try {
            target =  xstream.fromXML(in);
            System.out.println("输入成功");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return target;
    }

  3.4对象转文件流

  

 public static void toXML(Object obj, OutputStream out) {
        XStream xstream = XSTREAM;
        xstream.toXML(obj,out);
        System.out.println("输出成功");
    }

PS:XStream将java对象与xml之间序列化与反序列化,XStream自己封装了序列化方法,java类不用实现Serializable接口

XStream--java对象与xml形式文件相互转换

标签:sys   时区   shanghai   2.3   相互   asi   not   void   return   

原文地址:https://www.cnblogs.com/future-eye/p/8446721.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!