序列化: 假设被序列化的对象有一些到其它对象的引用,这些对象还义勇了另外一些对象,在序列化该对象的时候,所有它引用的对象将被递归地定位和序列化。
归纳:•对象--》对象输出流--》输出流--》(序列化) 
      •输入流--》对象输入流--》对象---》(反序列化) 
示例如下:
1:作出一个要序列化的窗体:如图
类为kankan.java
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.Rectangle;
import javax.swing.JRadioButton;
import javax.swing.JTextArea;
public class kankan extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JRadioButton jRadioButton = null;
private JRadioButton jRadioButton1 = null;
private JTextArea jTextArea = null;
/**
* This is the default constructor
*/
public kankan() {
   super();
   initialize();
}
/**
* This method initializes this
* 
* @return void
*/
private void initialize() {
   this.setSize(300, 200);
   this.setContentPane(getJContentPane());
   this.setTitle("JFrame");
}
/**
* This method initializes jContentPane
* 
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
   if (jContentPane == null) {
    jContentPane = new JPanel();
    jContentPane.setLayout(null);
    jContentPane.add(getJRadioButton(), null);
    jContentPane.add(getJRadioButton1(), null);
    jContentPane.add(getJTextArea(), null);
   }
   return jContentPane;
}
/**
* This method initializes jRadioButton 
* 
* @return javax.swing.JRadioButton 
*/
private JRadioButton getJRadioButton() {
   if (jRadioButton == null) {
    jRadioButton = new JRadioButton();
    jRadioButton.setBounds(new Rectangle(30, 24, 77, 21));
    jRadioButton.setText("123");
   }
   return jRadioButton;
}
/**
* This method initializes jRadioButton1 
* 
* @return javax.swing.JRadioButton 
*/
private JRadioButton getJRadioButton1() {
   if (jRadioButton1 == null) {
    jRadioButton1 = new JRadioButton();
    jRadioButton1.setBounds(new Rectangle(35, 56, 59, 21));
    jRadioButton1.setText("1234");
   }
   return jRadioButton1;
}
/**
* This method initializes jTextArea 
* 
* @return javax.swing.JTextArea 
*/
private JTextArea getJTextArea() {
   if (jTextArea == null) {
    jTextArea = new JTextArea();
    jTextArea.setBounds(new Rectangle(128, 15, 109, 116));
   }
   return jTextArea;
}
}
然后在用另一窗体来调用:
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.Rectangle;
import java.io.*;
public class haohao extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JButton jButton = null;
private JButton jButton1 = null;
private JButton jButton2 = null;
private JButton jButton3 = null;
public kankan f1;
public kankan f2;
/**
* This is the default constructor
*/
public haohao() {
   super();
   initialize();
}
/**
* This method initializes this
* 
* @return void
*/
private void initialize() {
   this.setSize(300, 200);
   this.setContentPane(getJContentPane());
   this.setTitle("JFrame");
}
/**
* This method initializes jContentPane
* 
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
   if (jContentPane == null) {
    jContentPane = new JPanel();
    jContentPane.setLayout(null);
    jContentPane.add(getJButton(), null);
    jContentPane.add(getJButton1(), null);
    jContentPane.add(getJButton2(), null);
    jContentPane.add(getJButton3(), null);
   }
   return jContentPane;
}
/**
* This method initializes jButton 
* 
* @return javax.swing.JButton 
*/
private JButton getJButton() {
   if (jButton == null) {
    jButton = new JButton();
    jButton.setBounds(new Rectangle(14, 18, 81, 34));
    jButton.setText("f1");
    jButton.addActionListener(new java.awt.event.ActionListener() {   
     public void actionPerformed(java.awt.event.ActionEvent e) {    
                      f1=new kankan();//显示要序列化窗体
                      f1.setVisible(true);
     }
   
    });
   }
   return jButton;
}
/**
* This method initializes jButton1 
* 
* @return javax.swing.JButton 
*/
private JButton getJButton1() {
   if (jButton1 == null) {
    jButton1 = new JButton();
    jButton1.setBounds(new Rectangle(154, 20, 100, 36));
    jButton1.setText("序列化");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
     public void actionPerformed(java.awt.event.ActionEvent e) {
      f1=new kankan();
                      FileOutputStream fos = null;
       try {
        fos = new FileOutputStream ("d:\\456");//文件输出流
       } catch (FileNotFoundException e1) {
        // TODO 自动生成 catch 块
        e1.printStackTrace();
       }
                      try {
        ObjectOutputStream oos=new ObjectOutputStream(fos);//输出流的对象
        oos.writeObject(f1);//把对象写入文件流当中
        fos.close();
        oos.close();
       } catch (IOException e1) {
        // TODO 自动生成 catch 块
        e1.printStackTrace();
       }
     }
    });
   }
   return jButton1;
}
/**
* This method initializes jButton2 
* 
* @return javax.swing.JButton 
*/
private JButton getJButton2() {
   if (jButton2 == null) {
    jButton2 = new JButton();
    jButton2.setBounds(new Rectangle(13, 100, 86, 34));
    jButton2.setText("反序列化");
    jButton2.addActionListener(new java.awt.event.ActionListener() {
     public void actionPerformed(java.awt.event.ActionEvent e) {
               
                FileInputStream fis = null;
     try {
      fis = new FileInputStream("d:\\123");//文件输入流
     } catch (FileNotFoundException e1) {
      // TODO 自动生成 catch 块
      e1.printStackTrace();
     }
                try {
      ObjectInputStream ois=new ObjectInputStream(fis);//创建文件输入流的对象
      f2=(kankan) ois.readObject();//把文件流读取出来给对象
      fis.close();
      ois.close();
     
     } catch (IOException e1) {
      // TODO 自动生成 catch 块
      e1.printStackTrace();
     } catch (ClassNotFoundException e2) {
      // TODO 自动生成 catch 块
      e2.printStackTrace();
     }
              
                
     }
    });
   }
   return jButton2;
}
/**
* This method initializes jButton3 
* 
* @return javax.swing.JButton 
*/
private JButton getJButton3() {
   if (jButton3 == null) {
    jButton3 = new JButton();
    jButton3.setBounds(new Rectangle(158, 96, 96, 39));
    jButton3.setText("F2");
    jButton3.addActionListener(new java.awt.event.ActionListener() {
     public void actionPerformed(java.awt.event.ActionEvent e) {
                    f2=new kankan();
                    f2.setVisible(true);
     }
    });
   }
   return jButton3;
}
}
•序列化也是实现远呈方法调用所需的,对象可以作为远程参数被传递。发送方序列化该对象,然后传送它,接收方再通过反序列化还原对象。
 
                    
                     
                    
                 
                    
                 
        

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号