🐵 #面试 #CCQC

可序列化(adj.Serializable)

  • 定义:序列化指:
    • 将java对象转换成可保持(为文件)或者可传输(网络)的格式。
    • 相对应的,反序列化即将上面的流转为的对象。
  • 为什么要序列化?
    • 需要将对象进行网络传输。
    • 需要将对象进行持久保存,但不用数据库。
  • Serializable接口:
    • 标识这个类的对象可序列化
  • 实例:

    • 参与序列化的对象

      1. public class Employee implements java.io.Serializable
      2. {
      3. public int number;
      4. public void mailCheck()
      5. {
      6. System.out.println("Mailing a check to " + name + " " + address);
      7. }
      8. }
      • ⭐可序列化的类必须实现java.io.Serializable接口。
      • 类的属性必须是可序列化的。如果属性不能序列化,应当注明。
    • 序列化:

      1. import java.io.*;
      2. public class SerializeDemo
      3. {
      4. public static void main(String [] args)
      5. {
      6. e.number = 101;
      7. try
      8. {
      9. FileOutputStream fileOut = new FileOutputStream("/tmp/employee.ser"); //指定序列化保存文件
      10. ObjectOutputStream out = new ObjectOutputStream(fileOut); //序列化
      11. out.writeObject(e);
      12. out.close();
      13. fileOut.close();
      14. }catch(IOException i)
      15. {
      16. i.printStackTrace();
      17. }
      18. }
      19. }
    • 反序列化: ```java import java.io.*;

public class DeserializeDemo { public static void main(String [] args) { Employee e = null; try { FileInputStream fileIn = new FileInputStream(“/tmp/employee.ser”); //打开序列对象的文件 ObjectInputStream in = new ObjectInputStream(fileIn); //准备反序列化 e = (Employee) in.readObject(); //赋予对象 in.close(); fileIn.close(); }catch(IOException i) { i.printStackTrace(); return; }catch(ClassNotFoundException c) { System.out.println(“Employee class not found”); c.printStackTrace(); return; } System.out.println(“Number: “ + e.number); } } ```