Spring OXM-XStream流化对象
- 概述
- 示例
- 示例源码
概述
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流化对象相关推荐
- Spring oxm入门实例
O/XMapper是什么? Spring3.0的一个新特性是O/XMapper.O/X映射器这个概念并不新鲜,O代表Object,X代表XML.它的目的是在Java对象(几乎总是一个plainoldJ ...
- 在asp.net2.0中使用串行化对象实现自定义配置
在一次升级一个entlib1.0到entlib的高版本程序时,碰到entlib的一个通过XmlSerializer方式实现的自定义配置.而在entlib的高版本中这样的配置不再被支持.可是又不希望修改 ...
- java 怎么把list流化_Java 中的数据流和函数式编程
原标题:Java 中的数据流和函数式编程 学习如何使用 Java 8 中的流 API 和函数式编程结构.-- Marty Kalin(作者) 当 Java SE 8(又名核心 Java 8)在 201 ...
- 池化对象 RecyclableMemoryStream 在 .netcore 中的使用
Microsoft.IO.RecyclableMemoryStream 是一个被设计为专门用于提高 Stream 操作的高性能类库,意思很明显,专用于取代 MemoryStream 而生,Recycl ...
- spring gateway 限流持久化_Spring Cloud Gateway网关如何快速实施限流方案?-Part 6
熔断降级 在分布式系统中,网关作为流量的入口,大量请求进入网关,向后端远程系统或服务发起调用,后端服务不可避免的会产生调用失败(超时或者异常),失败时不能让请求堆积在网关上,需要快速失败并返回回去,这 ...
- vlc命令行: 转码 流化 推流
写在命令行之前的话: VLC不仅仅可以通过界面进行播放,转码,流化,也可以通过命令行进行播放,转码和流化.还可以利用里面的SDK进行二次开发. vlc命令行使用方法: 1,安装最新版的 ...
- Thinking in java 琐碎知识点之 I/O流 、对象序列化
Java I/O流 .对象序列化 1.File类 此类的实例可能表示(也可能不表示)实际文件系统对象,如文件或目录. File类可以新建.删除和重命名文件和目录,但是File不能访问文件本 ...
- Spring OXM
Spring OXM简介 O/X Mapping 是什么? Spring 3.0 的一个新特性是 O/X Mapper.然而O/X Mapping并不是新鲜的事物,Spring也是调用了第三方的O/X ...
- 对象序列化流与对象反序列化流(ObjectOutputStream,ObjectInputStream)
这个连接包含了常用的流------IO流(总篇章) 对象序列化:就是将对象保存到磁盘中,或者在网络中传输对象 这种机制就是使用一个字节序列表示一个对象,该字节序列包含:对象的类型.对象的数据和对象中存 ...
最新文章
- linux下java进程占用高问题分析过程
- 数据蒋堂 | 内置的数据无法实现高性能
- 【阿里巴巴】CBU技术部招聘
- 模态对话框和非模态对话框的消息循环分析
- C#~异步编程再续~你必须要知道的ThreadPool里的throw
- 美国科技投资交易约4.1%来自中国 投资仍然很困难
- 并发数 = QPS*平均响应时间(转)
- canvas特效收集
- python任务栏都隐藏了_请问如何始终隐藏WINDOWS任务栏?
- IAST 被动扫描 WebGoat
- 个股分析|巴菲特炒银行股的5个原因
- 从零开始SQL注入之二
- 全球研究:持续绩效管理可提高竞争优势
- go mod invalid pseudo-version
- php文件档结构图,ecshop文件结构名称详细版
- Windows 10 控制面板 (Control Panel)
- 群晖NAS搭建web服务器,并发布公网可访问 1/4
- fNIRS研究行文指南
- 华强北的AirPods耳机谁家比较靠谱?
- 2019年,中国即将发生的45个重大变化!
热门文章
- (char*)x C语言中的和*的详解
- pyspark 读取本txt 构建RDD
- webview加载本地html_安卓webview html5 自动播放本地视频,网上视频,可以循环播放...
- 40个亿非负整数中找到未出现的数
- Scala操作外部数据
- tableau可视化数据分析60讲(一)-tableau概念性叙述及环境配置
- tableau必知必会之如何将 Tableau Server 从 Windows 迁移到 Linux 的方法
- tableau必知必会之轻松搞定 关系网 图表
- 深入Python(5):random与range
- Python--判断一个字符串是否包含某子串的几种方法