XMLEncoder 类是 ObjectOutputStream 的互补替换,可用于生成 JavaBean 的文本表示形式,所使用方式与用 ObjectOutputStream 创建 Serializable 对象的二进制表示形式的方式相同。
XMLDecoder 类用于读取使用 XMLEncoder 创建的 XML 文档,用途类似于 ObjectInputStream。例如,用户可以使用以下代码片段来读取以 XML 文档形式(通过 XMLEncoder 类写入)定义的第一个对象:
例子创建一个JFrame,用XMLEncoder将JFrame对象保存到XML文件中,将保存好的XML文件通过XMLDecoder对象读出并显示JFrame。
import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.XMLDecoder; import java.beans.XMLEncoder; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import javax.swing.AbstractListModel; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; public class JBenchFrame extends JFrame { BorderLayout borderLayout1 = new BorderLayout(); JList list1 = new JList(); JButton fillButton = new JButton(); public static void main(String[] args) throws FileNotFoundException { // JBenchFrame bm = new JBenchFrame(); // // XMLEncoder e = new XMLEncoder( // new BufferedOutputStream( // new FileOutputStream("Test.xml"))); // e.writeObject(bm); // e.close(); XMLDecoder d = new XMLDecoder( new BufferedInputStream( new FileInputStream("Test.xml"))); JFrame result = (JFrame)d.readObject(); d.close(); result.setVisible(true); } public JBenchFrame() { this.getContentPane().setLayout(borderLayout1); this.setSize(new Dimension(400, 300)); fillButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ListData ld = new ListData(); long tmStart = System.currentTimeMillis(); list1.setModel(ld); list1.repaint(); long tmEnd = System.currentTimeMillis(); System.out.println(tmEnd - tmStart); } }); fillButton.setText("Fill"); this.getContentPane().add(new JScrollPane(list1), BorderLayout.CENTER); this.getContentPane().add(fillButton, BorderLayout.SOUTH); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } class ListData extends AbstractListModel { String[] strings = new String[10000]; public ListData() { for (int i = 0; i < 10000; i++) { strings[i] = "bob" + i; } } public int getSize() { return strings.length; } public Object getElementAt(int index) { return strings[index]; } }