Swing之保存窗口对象XMLEncoder和XMLDecoder 类使用示例

来源:互联网 发布:马云多少钱收购淘宝 编辑:程序博客网 时间:2024/06/11 16:37
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];     }   }  

原创粉丝点击