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序列化.
如果您正在寻找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)
| 归档时间: |
|
| 查看次数: |
24837 次 |
| 最近记录: |