zoukankan      html  css  js  c++  java
  • XStream--java对象与xml形式文件相互转换

    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接口

    
    
  • 相关阅读:
    SettingWithCopyWarning
    统计运算
    数据清洗
    dataframe 索引
    那些拯救我的快捷键
    如何拒绝那些哭天抢地向你求救结果把你坑了的同事?
    Linux 笔记
    数据可视化:桑基图
    敏捷
    持续集成的概念
  • 原文地址:https://www.cnblogs.com/future-eye/p/8446721.html
Copyright © 2011-2022 走看看