• 概述
  • 示例
  • 示例源码

概述

XStream为java.io.ObjectInputStream和ObjectOutputStream提供了替代的实现,允许以对象流方式进行XML序列化或者反序列化操作。

这对于处理集合对象非常有用(List<User> users),在内存中只保留一个User对象流。很显然,我们应该使用基于流而非DOM的XML解析器读取XML,以提高性能。

创建一个输出流,我们不得不提到HierarchicalStreamWriter. 它是一个接口,字面意思就是层级关系的输出流。 XStream默认提供了几个常用的实现类用于输出,比如CompactWriter和PrettyPrintWriter。

示例

package com.xgj.oxm.xstream.quickDemo.streamObject;import java.io.BufferedReader;
import java.io.FileReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.util.Date;import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
import com.xgj.oxm.xstream.quickDemo.domain.LoginLog;
import com.xgj.oxm.xstream.quickDemo.domain.User;public class ObjectStreamDemo {private static XStream xstream;static {xstream = new XStream();}/*** * * @Title: objectToXml* * @Description: JAVA对象转化为XML* * @throws Exception* * @return: void*/public void objectToXml() throws Exception {// (1)实例化序列化对象User user = getUser();// (2)创建一个PrintWriter对象,用于输出。PrintWriter pw = new PrintWriter("D:\\ObjectStreamSample.xml");// (3)创建一个HierarchicalStreamWriter的实现类来创建输出PrettyPrintWriter ppw = new PrettyPrintWriter(pw);// (4)创建对象输出流ObjectOutputStream out = xstream.createObjectOutputStream(ppw);out.writeObject(user);out.close();}/*** * * @Title: xmlToObject* * @Description: XML转化为JAVA对象* * @return* @throws Exception* * @return: User*/public User xmlToObject() throws Exception {// (1)我们需要通过对象流进行输入操作,需要FileReader和BufferedReaderFileReader fr = new FileReader("D:\\ObjectStreamSample.xml");BufferedReader br = new BufferedReader(fr);//(2)创建对象输入流ObjectInputStream input = xstream.createObjectInputStream(br);// (3)创建对象,通过ObjectInputStream中的readObject()方法将对象从XML文件中读取出来。User user = (User) input.readObject();return user;}/*** * * @Title: getUser* * @Description: 初始化转换对象* * @return* * @return: User*/public static User getUser() {LoginLog log1 = new LoginLog();LoginLog log2 = new LoginLog();log1.setIp("192.168.1.91");log1.setLoginDate(new Date());log2.setIp("192.168.1.92");log2.setLoginDate(new Date());User user = new User();user.setId(1);user.setUserName("xstream");user.addLoginLog(log1);user.addLoginLog(log2);return user;}public static void main(String[] args) throws Exception {ObjectStreamDemo converter = new ObjectStreamDemo();converter.objectToXml();User u = converter.xmlToObject();for (LoginLog log : u.getLogs()) {if (log != null) {System.out.println("访问IP: " + log.getIp());System.out.println("访问时间: " + log.getLoginDate());}}}}

示例源码

代码已托管到Github—> https://github.com/yangshangwei/SpringMaster

Spring OXM-XStream流化对象相关推荐

  1. Spring oxm入门实例

    O/XMapper是什么? Spring3.0的一个新特性是O/XMapper.O/X映射器这个概念并不新鲜,O代表Object,X代表XML.它的目的是在Java对象(几乎总是一个plainoldJ ...

  2. 在asp.net2.0中使用串行化对象实现自定义配置

    在一次升级一个entlib1.0到entlib的高版本程序时,碰到entlib的一个通过XmlSerializer方式实现的自定义配置.而在entlib的高版本中这样的配置不再被支持.可是又不希望修改 ...

  3. java 怎么把list流化_Java 中的数据流和函数式编程

    原标题:Java 中的数据流和函数式编程 学习如何使用 Java 8 中的流 API 和函数式编程结构.-- Marty Kalin(作者) 当 Java SE 8(又名核心 Java 8)在 201 ...

  4. 池化对象 RecyclableMemoryStream 在 .netcore 中的使用

    Microsoft.IO.RecyclableMemoryStream 是一个被设计为专门用于提高 Stream 操作的高性能类库,意思很明显,专用于取代 MemoryStream 而生,Recycl ...

  5. spring gateway 限流持久化_Spring Cloud Gateway网关如何快速实施限流方案?-Part 6

    熔断降级 在分布式系统中,网关作为流量的入口,大量请求进入网关,向后端远程系统或服务发起调用,后端服务不可避免的会产生调用失败(超时或者异常),失败时不能让请求堆积在网关上,需要快速失败并返回回去,这 ...

  6. vlc命令行: 转码 流化 推流

    写在命令行之前的话:     VLC不仅仅可以通过界面进行播放,转码,流化,也可以通过命令行进行播放,转码和流化.还可以利用里面的SDK进行二次开发. vlc命令行使用方法:     1,安装最新版的 ...

  7. Thinking in java 琐碎知识点之 I/O流 、对象序列化

    Java I/O流 .对象序列化 1.File类    此类的实例可能表示(也可能不表示)实际文件系统对象,如文件或目录.    File类可以新建.删除和重命名文件和目录,但是File不能访问文件本 ...

  8. Spring OXM

    Spring OXM简介 O/X Mapping 是什么? Spring 3.0 的一个新特性是 O/X Mapper.然而O/X Mapping并不是新鲜的事物,Spring也是调用了第三方的O/X ...

  9. 对象序列化流与对象反序列化流(ObjectOutputStream,ObjectInputStream)

    这个连接包含了常用的流------IO流(总篇章) 对象序列化:就是将对象保存到磁盘中,或者在网络中传输对象 这种机制就是使用一个字节序列表示一个对象,该字节序列包含:对象的类型.对象的数据和对象中存 ...

最新文章

  1. linux下java进程占用高问题分析过程
  2. 数据蒋堂 | 内置的数据无法实现高性能
  3. 【阿里巴巴】CBU技术部招聘
  4. 模态对话框和非模态对话框的消息循环分析
  5. C#~异步编程再续~你必须要知道的ThreadPool里的throw
  6. 美国科技投资交易约4.1%来自中国 投资仍然很困难
  7. 并发数 = QPS*平均响应时间(转)
  8. canvas特效收集
  9. python任务栏都隐藏了_请问如何始终隐藏WINDOWS任务栏?
  10. IAST 被动扫描 WebGoat
  11. 个股分析|巴菲特炒银行股的5个原因
  12. 从零开始SQL注入之二
  13. 全球研究:持续绩效管理可提高竞争优势
  14. go mod invalid pseudo-version
  15. php文件档结构图,ecshop文件结构名称详细版
  16. Windows 10 控制面板 (Control Panel)
  17. 群晖NAS搭建web服务器,并发布公网可访问 1/4
  18. fNIRS研究行文指南
  19. 华强北的AirPods耳机谁家比较靠谱?
  20. 2019年,中国即将发生的45个重大变化!

热门文章

  1. (char*)x C语言中的和*的详解
  2. pyspark 读取本txt 构建RDD
  3. webview加载本地html_安卓webview html5 自动播放本地视频,网上视频,可以循环播放...
  4. 40个亿非负整数中找到未出现的数
  5. Scala操作外部数据
  6. tableau可视化数据分析60讲(一)-tableau概念性叙述及环境配置
  7. tableau必知必会之如何将 Tableau Server 从 Windows 迁移到 Linux 的方法
  8. tableau必知必会之轻松搞定 关系网 图表
  9. 深入Python(5):random与range
  10. Python--判断一个字符串是否包含某子串的几种方法