java中的XMLEncoder用于序列化

tom*_*tom 5 java serialization

我只是想知道我如何使用XMLEncoder序列化ArrayList<foo>foo是我自己制作的类.

我是否必须做任何特别的事情,即首先定义我自己的xml结构,然后在列表中的每个值上调用toString并写出来?

谁能指点我一个好的教程?http://java.sun.com/products/jfc/tsc/articles/persistence4/多数民众赞成我一直在寻找,但它似乎没有提到什么与非库类做.

谢谢

van*_*nje 10

使用XMLEncoder序列化ArrayList没有什么特别之处.

这是一个例子:

有一个bean类TestBean:

public class TestBean {

  private String name;
  private int age;

  public TestBean() {
    this.name = "";
    this.age = 0;
  }

  public TestBean(String name, int age) {
    this.name = name;
    this.age = age;
  }

  // Getter and setter ...

  @Override
  public String toString() {
    return String.format("[TestBean: name='%s', age=%d]", name, age);
  }
}
Run Code Online (Sandbox Code Playgroud)

还有一个类Main,它将序列化ArrayList<TestBean>并再次读回:

public class Main {
  private static final String FILENAME = "testbeanlist.xml";

  public static void main(String[] args) {
    try {
      // Create a list of TestBean objects ...
      final List<TestBean> list = new ArrayList<TestBean>();
      list.add(new TestBean("Henry", 42));
      list.add(new TestBean("Tom", 11));

      System.out.println("Writing list to file " + FILENAME + ": " + list);

      // ... and serialize it via XMLEncoder to file testbeanlist.xml
      final XMLEncoder encoder = new XMLEncoder(new BufferedOutputStream(
          new FileOutputStream(FILENAME)));
      encoder.writeObject(list);
      encoder.close();

      // Use XMLDecoder to read the same XML file in.
      final XMLDecoder decoder = new XMLDecoder(new FileInputStream(FILENAME));
      final List<TestBean> listFromFile = (List<TestBean>) decoder.readObject();
      decoder.close();

      System.out.println("Reading list: " + listFromFile);
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后输出是:

Writing list to file testbeanlist.xml: [[TestBean: name='Henry', age=42], [TestBean: name='Tom', age=11]]
Reading list: [[TestBean: name='Henry', age=42], [TestBean: name='Tom', age=11]]
Run Code Online (Sandbox Code Playgroud)

该toString()方法TestBean仅适用于漂亮的打印.它不会影响XML序列化.


Jig*_*shi 9

如果您正在寻找XML序列化,我建议您选择XStream

Person joe = new Person("Joe", "Walnes");
joe.setPhone(new PhoneNumber(123, "1234-456"));
joe.setFax(new PhoneNumber(123, "9999-999"));

String xml = xstream.toXML(joe);

<person>
  <firstname>Joe</firstname>
  <lastname>Walnes</lastname>
  <phone>
    <code>123</code>
    <number>1234-456</number>
  </phone>
  <fax>
    <code>123</code>
    <number>9999-999</number>
  </fax>
</person>
Run Code Online (Sandbox Code Playgroud)