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]; } }