使用XStream是实现XML与Java对象的转换(5)--Object Stream
八,Object Stream
之前的例子我们都是直接输出Xml成为String类型或者从String中获得并解析Xml,现在我们要处理输入流和输出流!
1,输出流(ObjectOutputStream)
输出流测试程序如下:
- package cn.tjpu.zhw.xml.xstream5;
- import java.io.IOException;
- import java.io.ObjectOutputStream;
- import com.thoughtworks.xstream.XStream;
- public class OutMain {
- public static void main(String[] args) throws IOException {
- //创建XStream对象
- XStream xstream = new XStream();
- /*******1,序列化单个对象*******/
- System.out.println("*******1,序列化单个对象*******");
- xstream.toXML(new Person("张三"), System.out);
- System.out.println();
- System.out.println();
- /*******2,序列化一组对象*******/
- System.out.println("*******2,序列化一组对象*******");
- //将格式化后的xml输出到System.out中,root是根节点
- ObjectOutputStream oos = xstream.createObjectOutputStream(System.out,"root");
- oos.writeObject(new Person("张三"));
- oos.writeObject(new Person("李四"));
- oos.writeObject(new Integer(1));
- oos.writeObject(2);
- oos.writeObject(new Double(3));
- oos.writeObject(4d);
- oos.writeObject('c');
- oos.writeObject("这是一堆字符串!");
- //一定要关闭流
- oos.close();
- }
- }
- class Person {
- public Person(String name){
- this.name = name;
- }
- private String name;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String toString() {
- return "Person对象的name="+getName();
- }
- }
运行结果:
- *******1,序列化单个对象*******
- <cn.tjpu.zhw.xml.xstream5.Person>
- <name>张三</name>
- </cn.tjpu.zhw.xml.xstream5.Person>
- *******2,序列化一组对象*******
- <root>
- <cn.tjpu.zhw.xml.xstream5.Person>
- <name>张三</name>
- </cn.tjpu.zhw.xml.xstream5.Person>
- <cn.tjpu.zhw.xml.xstream5.Person>
- <name>李四</name>
- </cn.tjpu.zhw.xml.xstream5.Person>
- <int>1</int>
- <int>2</int>
- <double>3.0</double>
- <double>4.0</double>
- <char>c</char>
- <string>这是一堆字符串!</string>
- </root>
上面两个例子都是直接使用System.out,将XML输出到控制台。其实我们可以将其替换成我们喜欢的任何输出流,比如FileWriter等。
2,输入流(ObjectInputStream)
将如下内容写入D:/temp1.xml文件:
- <cn.tjpu.zhw.xml.xstream5.Person>
- <name>张三</name>
- </cn.tjpu.zhw.xml.xstream5.Person>
将如下内容写入D:/temp2.xml文件:
- <root>
- <cn.tjpu.zhw.xml.xstream5.Person>
- <name>张三</name>
- </cn.tjpu.zhw.xml.xstream5.Person>
- <cn.tjpu.zhw.xml.xstream5.Person>
- <name>李四</name>
- </cn.tjpu.zhw.xml.xstream5.Person>
- <int>1</int>
- <int>2</int>
- <double>3.0</double>
- <double>4.0</double>
- <char>c</char>
- <string>这是一堆字符串!</string>
- </root>
输入流测试程序如下:
- package cn.tjpu.zhw.xml.xstream5;
- import java.io.EOFException;
- import java.io.File;
- import java.io.FileReader;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import com.thoughtworks.xstream.XStream;
- public class InMain {
- public static void main(String[] args) throws IOException, ClassNotFoundException {
- //创建XStream对象
- XStream xstream = new XStream();
- /*******1,反序列化一个对象*******/
- FileReader reader1 = new FileReader(new File("D:/temp1.xml"));
- Person pp = (Person)xstream.fromXML(reader1);
- System.out.println("*******1,反序列化一个对象*******");
- System.out.println("pp="+pp);
- System.out.println();
- System.out.println();
- /*******1,反序列化一组对象*******/
- FileReader reader2 = new FileReader(new File("D:/temp2.xml"));
- ObjectInputStream ois = xstream.createObjectInputStream(reader2);
- Person p1 = (Person)ois.readObject();
- System.out.println("p1="+p1);
- Person p2 = (Person)ois.readObject();
- System.out.println("p2="+p2);
- int i1 = (Integer)ois.readObject();
- System.out.println("i1="+i1);
- int i2 = (Integer)ois.readObject();
- System.out.println("i2="+i2);
- double d1 = (Double)ois.readObject();
- System.out.println("d1="+d1);
- double d2 = (Double)ois.readObject();
- System.out.println("d2="+d2);
- char ch = (Character)ois.readObject();
- System.out.println("ch="+ch);
- String str = (String)ois.readObject();
- System.out.println("str="+str);
- System.out.println("******异常捕获******");
- //发生异常
- try {
- ois.readObject();
- } catch (EOFException e) {
- System.out.println("因为已经没有数据了,再次读取时,就会发生EOFException异常");
- }
- }
- }
运行结果:
- *******1,反序列化一个对象*******
- pp=Person对象的name=张三
- p1=Person对象的name=张三
- p2=Person对象的name=李四
- i1=1
- i2=2
- d1=3.0
- d2=4.0
- ch=c
- str=这是一堆字符串!
- ******异常捕获******
- 因为已经没有数据了,再次读取时,就会发生EOFException异常
使用XStream是实现XML与Java对象的转换(5)--Object Stream的更多相关文章
- 使用XStream是实现XML与Java对象的转换(6)--持久化
九.持久化 在第八节的示例中,当我们操作一组对象时,我们可以指定Writer.OutputStream来写出序列化后的XML数据,我们还可以指定Reader.InputStream来读取序列化后的XM ...
- 使用XStream是实现XML与Java对象的转换(4)--转换器
七.转换器(Converter) 我们程序中的POJO是千变万化的,而且需求也是千奇百怪的,所以XStream中的内置的转换器的功能不一定能够满足我们的要求,所以我们就需要自己构建转换器. 1,一个基 ...
- 使用XStream是实现XML与Java对象的转换(3)--注解
六.使用注解(Annotation) 总是使用XStream对象的别名方法和注册转换器,会让人感到非常的乏味,又会产生很多重复性代码,于是我们可以使用注解的方式来配置要序列化的POJO对象. 1,最基 ...
- 使用XStream是实现XML与Java对象的转换(1)--简介及入门示例
一.简单介绍 XStream是thoughtworks开发的开源框架,用于实现XML数据于Java对象.Json数据的转换.它不需要schema或其他的mapping文件就可以进行java对象和xml ...
- 使用XStream是实现XML与Java对象的转换(2)--别名
五.使用别名(Alias) 首先,有这样一段Java代码: import java.util.ArrayList; import java.util.List; import com.thoughtw ...
- 不规矩的xml与JAVA对象互相转换的小技巧-使用Marshaller
摘要:将XML文档与JAVA对象互转是很常见的需求,如果XML定义很规整这很好实现.然而在现实中“不规矩”的XML可能更常见,Marshaller便无能为力了吗?下面是一个小技巧,调整一下思维便能重用 ...
- XStream轻松转换xml和java对象
首先引入所需的jar: xstream-1.4.9.xpp3_min-1.1.4c.dom4j-1.6.1, 或用maven管理jar包时在pom.xml中添加: <!-- https://mv ...
- xml-mapping xml 与 java 对象转换映射框架,像 XStream 一样优雅地读写xml
xml xml 是 java 实现的 xml 框架. 希望以最优雅的方式进行 xml 和 java 之间的转换处理,一行代码搞定一切. 特点 对象的和 xml 的互相映射 支持注解 @Alias 指定 ...
- XML 和 java对象相互转换
XML 和 java对象相互转换 博客分类: XML 和 JSON 下面使用的是JDK自带的类,没有引用任何第三方jar包. Unmarshaller 类使客户端应用程序能够将 XML 数据转换为 ...
随机推荐
- 剑指Offer——二叉树
剑指Offer--二叉树 前言 数据结构通常是编程面试中考察的重点.在参加面试之前,应聘者需要熟练掌握链表.树.栈.队列和哈希表等数据结构,以及它们的操作.本片博文主要讲解二叉树操作的相关知识,主要包 ...
- 05 Activity生命周期
生命周期:一个Activity从创建到销毁经过的全部方法 1.onCreate() 创建一个Activity的时候执行的方法 2.onStart()Activity可以被看见到时候无法交互(没有焦点) ...
- Linux技巧:一次删除一百万个文件的最快方法
最初的测评 昨天,我看到一个非常有趣的删除一个目录下的海量文件的方法.这个方法来自http://www.quora.com/How-can-someone-rapidly-delete-400-000 ...
- 网站开发进阶(四十二)巧用clear:both
网站开发进阶(四十二)巧用clear:both 前言 我们在制作网页中用div+css或者称xhtml+css都会遇到一些很诡异的情况,明明布局正确,但是整个画面却混乱起来了,有时候在IE6下看的很正 ...
- UNIX环境高级编程——线程和信号
每个线程都有自己的信号屏蔽字,但是信号的处理是进程中所有线程共享的.这意味着尽管单个线程可以阻止某些信号,但当线程修改了与某个信号相关的处理行为以后,所有的线程都必须共享这个处理行为的改变.这样如果一 ...
- Windows7 x64 跨平台开发环境安装配置
======================================================================= Windows7 x64 跨平台开发环境安装配置 201 ...
- Spark1.4从HDFS读取文件运行Java语言WordCounts
Hadoop:2.4.0 Spark:1.4.0 Ubuntu 14.0 1.首先启动Hadoop的HDFS系统. HADOOP_HOME/sbin/start-dfs.sh 2.在Linux ...
- Github最流行的10,000个Java项目使用的类库
本文由 ImportNew - Andy.Song 翻译自 takipiblog.欢迎加入翻译小组.转载请见文末要求. 前言 作为Java开发人员,总是需要面临这门不断成熟.高速改进中的语言.开发人员 ...
- Java关键字之this
this的作用: 1) this是当前对象的一个引用,便于对当前对象参数的使用: 2)可以返回对象的自己这个类的引用,同时还可以在一个构造函数当中调用另一个构造函数 this示例: public cl ...
- andrid面试题
下面的题目都是楼主在android交流群大家面试时遇到的,如果大家有好的题目或者好的见解欢迎分享,楼主将长期维护此帖. 某公司高级面试题(2015-03-14)[感谢helder分享] 1.详述And ...