使用XStream是实现XML与Java对象的转换(5)--Object Stream

八,Object Stream

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

1,输出流(ObjectOutputStream)

输出流测试程序如下:

Java代码

  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. }

运行结果:

Java代码

  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文件:

Xml代码

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

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

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>

输入流测试程序如下:

Java代码

  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. }

运行结果:

Java代码

  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异常
时间: 2024-11-05 21:59:55

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

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

九.持久化 在第八节的示例中,当我们操作一组对象时,我们可以指定Writer.OutputStream来写出序列化后的XML数据,我们还可以指定Reader.InputStream来读取序列化后的XML数据.当我们需要写出和读取文件时都需要指定输入输出流,并且需要明确的调用输入输出方法来实现Java对象的序列化和反序列化,其实我们完全可以让Java对象的序列化和反序列化操作隐性的.自动的完成,这就是我们要学的内容:PersistenceStrategy.XmlArrayList.XmlMap和X

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

五.使用别名(Alias) 首先,有这样一段Java代码: Java代码 import java.util.ArrayList; import java.util.List; import com.thoughtworks.xstream.XStream; public class XStreamTest2 { public static void main(String[] args) { Blog teamBlog = new Blog(new Author("Guilherme Silve

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

xml xml 是 java 实现的 xml 框架. 希望以最优雅的方式进行 xml 和 java 之间的转换处理,一行代码搞定一切. 特点 对象的和 xml 的互相映射 支持注解 @Alias 指定别名 支持注解 @Ignore 指定忽略的字段 变更日志 CHANGE_LOG 快速开始 准备 jdk 1.7+ maven 3.x+ maven 引入 <dependency> <groupId>com.github.houbb</groupId> <artifac

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

xml xml 是 java 实现的 xml 框架. 希望以最优雅的方式进行 xml 和 java 之间的转换处理,一行代码搞定一切. 特点 对象的和 xml 的互相映射 支持注解 @Alias 指定别名 支持注解 @Ignore 指定忽略的字段 变更日志 CHANGE_LOG 快速开始 准备 jdk 1.7+ maven 3.x+ maven 引入 <dependency> <groupId>com.github.houbb</groupId> <artifac

Java&amp;amp;Xml教程(十一)JAXB实现XML与Java对象转换

JAXB是Java Architecture for XML Binding的缩写,用于在Java类与XML之间建立映射,可以帮助开发人员非常方便的將XML和Java对象进行相互转换. 本文以一个简单的样例介绍JAXB的使用.首先我们须要了解一下JAXB经常使用的API. JAXBContext类.是应用的入口.用于管理XML/Java绑定信息. Marshaller接口.将Java对象序列化为XML数据. Unmarshaller接口,将XML数据反序列化为Java对象. @XmlType,将

JAXB完成XML与Java对象的互转

这段时间都老忙了,甚至连周末所有人员都在赶产品的进度,想想连续上12天班,人都有点晕了!到这会儿终于有点时间,所以准备和大家分享一下JAXB,会不会有人觉得有点陌生呢?没事,这里跟大伙儿简单的描述一下: JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档.从另一方面来讲,JA

JAXB:xml与java对象互转

JaxbContext生成xml文件或java类对象转化注解    JAXB提供了一个快速便捷的方式将Java对象与XML进行转换.在JAX-WS(Java的WebService规范之一)中,JDK1.6 自带的版本JAX-WS2.1,其底层支持就是JAXB.  JAXB 可以实现Java对象与XML的相互转换,在JAXB中,将一个Java对象转换为XML的过程称之为Marshal,将XML转换为Java对象的过程称之为UnMarshal.我们可以通过在Java 类中标注注解的方式将一个Java

Json对象与Json字符串的转化、JSON字符串与Java对象的转换

Json对象与Json字符串的转化.JSON字符串与Java对象的转换 一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 2.浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9,ie8)等浏览器: JSON.stringify(obj)将JSON转为字符串.JSON.parse(string)

JSON字符串与java对象的转换

所需的jar包: 1.commons-lang.jar 2.commons-beanutils.jar 3.commons-collections.jar 4.commons-logging.jar 5.ezmorph.jar 6.json-lib-2.2.2-jdk15.jar 1. 把java 对象列表转换为json对象数组,并转为字符串 JSONArray array = JSONArray.fromObject(userlist); String jsonstr = array.toSt