XStream - 对象流

  • 简述

    XStream 提供了 java.io.ObjectInputStream 和 java.io.ObjectOutputStream 的替代实现,以便可以从 XML 序列化或反序列化对象流。这在处理大量对象时特别有用,一次在内存中保留一个对象。
  • 语法:createObjectOutputStream()

    
    ObjectOutputStream objectOutputStream = xstream.createObjectOutputStream(
       new FileOutputStream("test.txt"));
    
  • 语法:createObjectInputStream()

    
    ObjectInputStream objectInputStream = xstream.createObjectInputStream(
       new FileInputStream("test.txt"));
    
    现在让我们用 XStream 中的对象流测试代码。
    在 C:\>XStream_WORKSPACE\com\jc2182\xstream 中创建一个名为 XStreamTester 的 java 类文件。

    文件:XStreamTester.java

    
    package com.jc2182.xstream;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import com.thoughtworks.xstream.XStream;
    import com.thoughtworks.xstream.annotations.XStreamMooas;
    import com.thoughtworks.xstream.io.xml.StaxDriver;
    public class XStreamTester {
       public static void main(String args[]) {
       
          XStreamTester tester = new XStreamTester();
          XStream xstream = new XStream(new StaxDriver());
          
          xstream.autodetectAnnotations(true);
          
          Student student1 = new Student("Mahesh","Parashar");
          Student student2 = new Student("Suresh","Kalra");
          Student student3 = new Student("Ramesh","Kumar");
          Student student4 = new Student("Naresh","Sharma");
          
          try {
          
             ObjectOutputStream objectOutputStream = xstream.createObjectOutputStream(
                new FileOutputStream("test.txt"));
             
             objectOutputStream.writeObject(student1);
             objectOutputStream.writeObject(student2);
             objectOutputStream.writeObject(student3);
             objectOutputStream.writeObject(student4);
             objectOutputStream.writeObject("Hello World");
             
             objectOutputStream.close();
             
             ObjectInputStream objectInputStream = xstream.createObjectInputStream(
                new FileInputStream("test.txt"));
             
             Student student5 = (Student)objectInputStream.readObject();
             Student student6 = (Student)objectInputStream.readObject();
             Student student7 = (Student)objectInputStream.readObject();
             Student student8 = (Student)objectInputStream.readObject();
             
             String text = (String)objectInputStream.readObject();
             
             System.out.println(student5);
             System.out.println(student6);
             System.out.println(student7);
             System.out.println(student8);
             System.out.println(text);
          
          } catch (IOException e) {
             e.printStackTrace();
             
          } catch (ClassNotFoundException e) {
             e.printStackTrace();
          }
       }
    }
    @XStreamMooas("student")
    class Student {
       private String firstName;
       private String lastName;
       
       public Student(String firstName, String lastName) {
          this.firstName = firstName;
          this.lastName = lastName;
       }
       public String getFirstName() {
          return firstName;
       }
       public String getLastName() {
          return lastName;
       }   
       public String toString() {
          return "Student [ firstName: "+firstName+", lastName: "+ lastName+ " ]";
       }  
    }
    

    验证结果

    使用编译类 javac 编译器如下 -
    
    C:\XStream_WORKSPACE\com\jc2182\xstream>javac XStreamTester.java
    
    现在运行 XStreamTester 以查看结果 -
    
    C:\XStream_WORKSPACE\com\jc2182\xstream>java XStreamTester
    
    验证输出如下 -
    
    Student [ firstName: Mahesh, lastName: Parashar ]
    Student [ firstName: Suresh, lastName: Kalra ]
    Student [ firstName: Ramesh, lastName: Kumar ]
    Student [ firstName: Naresh, lastName: Sharma ]
    Hello World
    
    查看 test.txt 的内容 C:\>XStream_WORKSPACE\com\jc2182\xstream 文件夹。
    
    <?xml version = "1.0" ?>
    <object-stream>
       <student>
          <firstName>Mahesh</firstName>
          <lastName>Parashar</lastName>
       </student>
       
       <student>
          <firstName>Suresh</firstName>
          <lastName>Kalra</lastName>
       </student>
       
       <student>
          <firstName>Ramesh</firstName>
          <lastName>Kumar</lastName>
       </student>
       
       <student>
          <firstName>Naresh</firstName>
          <lastName>Sharma</lastName>
       </student>
       <string>Hello World</string>
    </object-stream>