八,Object Stream

之前的例子我们都是直接输出Xml成为String类型或者从String中获得并解析Xml,现在我们要处理输入流和输出流!

1,输出流(ObjectOutputStream)

输出流测试程序如下:

  1. package cn.tjpu.zhw.xml.xstream5;
  2. import java.io.IOException;
  3. import java.io.ObjectOutputStream;
  4. import com.thoughtworks.xstream.XStream;
  5. public class OutMain {
  6. public static void main(String[] args) throws IOException {
  7. //创建XStream对象
  8. XStream xstream = new XStream();
  9. /*******1,序列化单个对象*******/
  10. System.out.println("*******1,序列化单个对象*******");
  11. xstream.toXML(new Person("张三"), System.out);
  12. System.out.println();
  13. System.out.println();
  14. /*******2,序列化一组对象*******/
  15. System.out.println("*******2,序列化一组对象*******");
  16. //将格式化后的xml输出到System.out中,root是根节点
  17. ObjectOutputStream oos = xstream.createObjectOutputStream(System.out,"root");
  18. oos.writeObject(new Person("张三"));
  19. oos.writeObject(new Person("李四"));
  20. oos.writeObject(new Integer(1));
  21. oos.writeObject(2);
  22. oos.writeObject(new Double(3));
  23. oos.writeObject(4d);
  24. oos.writeObject('c');
  25. oos.writeObject("这是一堆字符串!");
  26. //一定要关闭流
  27. oos.close();
  28. }
  29. }
  30. class Person {
  31. public Person(String name){
  32. this.name = name;
  33. }
  34. private String name;
  35. public String getName() {
  36. return name;
  37. }
  38. public void setName(String name) {
  39. this.name = name;
  40. }
  41. public String toString() {
  42. return "Person对象的name="+getName();
  43. }
  44. }

运行结果:

  1. *******1,序列化单个对象*******
  2. <cn.tjpu.zhw.xml.xstream5.Person>
  3. <name>张三</name>
  4. </cn.tjpu.zhw.xml.xstream5.Person>
  5. *******2,序列化一组对象*******
  6. <root>
  7. <cn.tjpu.zhw.xml.xstream5.Person>
  8. <name>张三</name>
  9. </cn.tjpu.zhw.xml.xstream5.Person>
  10. <cn.tjpu.zhw.xml.xstream5.Person>
  11. <name>李四</name>
  12. </cn.tjpu.zhw.xml.xstream5.Person>
  13. <int>1</int>
  14. <int>2</int>
  15. <double>3.0</double>
  16. <double>4.0</double>
  17. <char>c</char>
  18. <string>这是一堆字符串!</string>
  19. </root>

上面两个例子都是直接使用System.out,将XML输出到控制台。其实我们可以将其替换成我们喜欢的任何输出流,比如FileWriter等。

2,输入流(ObjectInputStream)

将如下内容写入D:/temp1.xml文件:

  1. <cn.tjpu.zhw.xml.xstream5.Person>
  2. <name>张三</name>
  3. </cn.tjpu.zhw.xml.xstream5.Person>

将如下内容写入D:/temp2.xml文件:

  1. <root>
  2. <cn.tjpu.zhw.xml.xstream5.Person>
  3. <name>张三</name>
  4. </cn.tjpu.zhw.xml.xstream5.Person>
  5. <cn.tjpu.zhw.xml.xstream5.Person>
  6. <name>李四</name>
  7. </cn.tjpu.zhw.xml.xstream5.Person>
  8. <int>1</int>
  9. <int>2</int>
  10. <double>3.0</double>
  11. <double>4.0</double>
  12. <char>c</char>
  13. <string>这是一堆字符串!</string>
  14. </root>

输入流测试程序如下:

  1. package cn.tjpu.zhw.xml.xstream5;
  2. import java.io.EOFException;
  3. import java.io.File;
  4. import java.io.FileReader;
  5. import java.io.IOException;
  6. import java.io.ObjectInputStream;
  7. import com.thoughtworks.xstream.XStream;
  8. public class InMain {
  9. public static void main(String[] args) throws IOException, ClassNotFoundException {
  10. //创建XStream对象
  11. XStream xstream = new XStream();
  12. /*******1,反序列化一个对象*******/
  13. FileReader reader1 = new FileReader(new File("D:/temp1.xml"));
  14. Person pp = (Person)xstream.fromXML(reader1);
  15. System.out.println("*******1,反序列化一个对象*******");
  16. System.out.println("pp="+pp);
  17. System.out.println();
  18. System.out.println();
  19. /*******1,反序列化一组对象*******/
  20. FileReader reader2 = new FileReader(new File("D:/temp2.xml"));
  21. ObjectInputStream ois = xstream.createObjectInputStream(reader2);
  22. Person p1 = (Person)ois.readObject();
  23. System.out.println("p1="+p1);
  24. Person p2 = (Person)ois.readObject();
  25. System.out.println("p2="+p2);
  26. int i1 = (Integer)ois.readObject();
  27. System.out.println("i1="+i1);
  28. int i2 = (Integer)ois.readObject();
  29. System.out.println("i2="+i2);
  30. double d1 = (Double)ois.readObject();
  31. System.out.println("d1="+d1);
  32. double d2 = (Double)ois.readObject();
  33. System.out.println("d2="+d2);
  34. char ch = (Character)ois.readObject();
  35. System.out.println("ch="+ch);
  36. String str = (String)ois.readObject();
  37. System.out.println("str="+str);
  38. System.out.println("******异常捕获******");
  39. //发生异常
  40. try {
  41. ois.readObject();
  42. } catch (EOFException e) {
  43. System.out.println("因为已经没有数据了,再次读取时,就会发生EOFException异常");
  44. }
  45. }
  46. }

运行结果:

  1. *******1,反序列化一个对象*******
  2. pp=Person对象的name=张三
  3. p1=Person对象的name=张三
  4. p2=Person对象的name=李四
  5. i1=1
  6. i2=2
  7. d1=3.0
  8. d2=4.0
  9. ch=c
  10. str=这是一堆字符串!
  11. ******异常捕获******
  12. 因为已经没有数据了,再次读取时,就会发生EOFException异常

使用XStream是实现XML与Java对象的转换(5)--Object Stream的更多相关文章

  1. 使用XStream是实现XML与Java对象的转换(6)--持久化

    九.持久化 在第八节的示例中,当我们操作一组对象时,我们可以指定Writer.OutputStream来写出序列化后的XML数据,我们还可以指定Reader.InputStream来读取序列化后的XM ...

  2. 使用XStream是实现XML与Java对象的转换(4)--转换器

    七.转换器(Converter) 我们程序中的POJO是千变万化的,而且需求也是千奇百怪的,所以XStream中的内置的转换器的功能不一定能够满足我们的要求,所以我们就需要自己构建转换器. 1,一个基 ...

  3. 使用XStream是实现XML与Java对象的转换(3)--注解

    六.使用注解(Annotation) 总是使用XStream对象的别名方法和注册转换器,会让人感到非常的乏味,又会产生很多重复性代码,于是我们可以使用注解的方式来配置要序列化的POJO对象. 1,最基 ...

  4. 使用XStream是实现XML与Java对象的转换(1)--简介及入门示例

    一.简单介绍 XStream是thoughtworks开发的开源框架,用于实现XML数据于Java对象.Json数据的转换.它不需要schema或其他的mapping文件就可以进行java对象和xml ...

  5. 使用XStream是实现XML与Java对象的转换(2)--别名

    五.使用别名(Alias) 首先,有这样一段Java代码: import java.util.ArrayList; import java.util.List; import com.thoughtw ...

  6. 不规矩的xml与JAVA对象互相转换的小技巧-使用Marshaller

    摘要:将XML文档与JAVA对象互转是很常见的需求,如果XML定义很规整这很好实现.然而在现实中“不规矩”的XML可能更常见,Marshaller便无能为力了吗?下面是一个小技巧,调整一下思维便能重用 ...

  7. XStream轻松转换xml和java对象

    首先引入所需的jar: xstream-1.4.9.xpp3_min-1.1.4c.dom4j-1.6.1, 或用maven管理jar包时在pom.xml中添加: <!-- https://mv ...

  8. xml-mapping xml 与 java 对象转换映射框架,像 XStream 一样优雅地读写xml

    xml xml 是 java 实现的 xml 框架. 希望以最优雅的方式进行 xml 和 java 之间的转换处理,一行代码搞定一切. 特点 对象的和 xml 的互相映射 支持注解 @Alias 指定 ...

  9. XML 和 java对象相互转换

    XML 和 java对象相互转换 博客分类: XML 和 JSON   下面使用的是JDK自带的类,没有引用任何第三方jar包. Unmarshaller 类使客户端应用程序能够将 XML 数据转换为 ...

随机推荐

  1. 使用IDEA运行Spark程序

    使用IDEA运行Spark程序 1.安装IDEA 从IDEA官网下载Community版本,解压到/usr/local/idea目录下. tar –xzf ideaIC-13.1.4b.tar.gz ...

  2. 剑指Offer——算法复杂度中的O(logN)底数是多少

    剑指Offer--算法复杂度中的O(logN)底数是多少 前言 无论是计算机算法概论.还是数据结构书中,关于算法的时间复杂度很多都用包含O(logN)这样的描述,但是却没有明确说logN的底数究竟是多 ...

  3. 【Unity Shaders】Vertex Magic —— 访问顶点颜色

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  4. Android性能优化之Bitmap的内存优化

    1.BitmapFactory解析Bitmap的原理 BitmapFactory提供的解析Bitmap的静态工厂方法有以下五种: Bitmap decodeFile(...) Bitmap decod ...

  5. 匿名内部类使用外面的类为什么要用final型

    从程序设计语言的理论上:局部内部类(即:定义在方法中的内部类),由于本身就是在方法内部(可出现在形式参数定义处或者方法体处),因而访问方法中的局部变量(形式参数或局部变量)是天经地义的.是很自然的 为 ...

  6. Zeroc Ice Slice语言使用 HelloWorld

    Slice介绍         为了开发多语言支持的RPC服务,需要一种中立的新语言来定义这个服务接口,以便各个编程语言能够准确无误地理解和翻译接口,为此Ice设计了Slice语言.Ice开发的第一步 ...

  7. Java-IO之ByteArrayOutputStream

    ByteArrayOutputSTream是字节数组输出流,继承于OutputStream.ByteArrayOutputStream中的数据被写入到一个byte数组中,缓冲区会随着数据的不断写入而自 ...

  8. 如何回滚请求<复制系统初始的数据>所处理的数据

    一.    问题提出 请求名称:复制系统初始的数据 参数:空 问题: 今天早上财务实施人员新配置了一个OU,然后在跑复制系统初始的数据报表的时候,不小心,不输入参数就直接跑. 报表先是报错. 接下来的 ...

  9. postman使用—chrome版

    如果大家不知道怎么安装,请下载个FQ软件(蓝灯,shadowsocks)都是可以的,安装完成之后,你可以在chrome看到posman的插件程序. 使用说明: 安装完成之后,使用chrome://ap ...

  10. Linux IPC实践(1) -- 概述

    进程的同步与互斥 进程同步: 多个进程需要相互配合共同完成一项任务. 进程互斥: 由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥;系统中某些 ...