[Java] java 序列化与反序列化的使用 →→→→→进入此内容的聊天室

来自 , 2021-03-27, 写在 Java, 查看 109 次.
URL http://www.code666.cn/view/8ebda540
  1. import java.io.FileInputStream;
  2. import java.io.FileOutputStream;
  3. import java.io.ObjectInputStream;
  4. import java.io.ObjectOutputStream;
  5. import java.io.Serializable;
  6. import java.util.Date;
  7.  
  8. /**
  9.  * 序列化和反序列化对象
  10.  */
  11. public class SerializeObject {
  12.         // 一个内部类,用于被序列化和反序列化。
  13.         // 一定要实现Serializable才能够被序列化和反序列化。
  14.         static class MyClass implements Serializable {
  15.                 // 一般的实例变量会被序列化和反序列化
  16.                 private int a, b;
  17.                 // transient实例变量 不会 被序列化和反序列化
  18.                 private transient int c;
  19.                 // 类变量 不会 被序列化和反序列化
  20.                 private static int d;
  21.  
  22.                 public MyClass() {
  23.                 }
  24.  
  25.                 public MyClass(int a, int b, int c, int d) {
  26.                         this.a = a;
  27.                         this.b = b;
  28.                         this.c = c;
  29.                         MyClass.d = d;
  30.                 }
  31.  
  32.                 public String toString() {
  33.                         return this.a + "  " + this.b + "  " + this.c + "  " + MyClass.d;
  34.                 }
  35.         }
  36.  
  37.         /**
  38.          * 序列化对象到文件
  39.          */
  40.         public static void serialize(String fileName) throws Exception {
  41.                 // 创建一个对象输出流,将对象输出到文件
  42.                 ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(
  43.                                 fileName));
  44.                 // 序列化一个字符串对象到文件
  45.                 out.writeObject("Today:");
  46.                 // 序列化当前日期对象到文件
  47.                 out.writeObject(new Date());
  48.                 // 序列化一个MyClass对象
  49.                 MyClass my1 = new MyClass(5, 6, 7, 8);
  50.                 out.writeObject(my1);
  51.                 out.close();
  52.         }
  53.  
  54.         /**
  55.          * 从文件反序列化到对象
  56.          */
  57.         public static void deserialize(String fileName) throws Exception {
  58.                 // 创建一个对象输入流,从文件读取对象
  59.                 ObjectInputStream in = new ObjectInputStream(new FileInputStream(
  60.                                 fileName));
  61.                 // 注意读对象时必须按照序列化对象时的顺序读,否则会出错
  62.                 // 读取字符串对象
  63.                 String today = (String) (in.readObject());
  64.                 System.out.println(today);
  65.                 // 读日期对象
  66.                 Date date = (Date) (in.readObject());
  67.                 System.out.println(date.toString());
  68.                 // 读MyClass对象,并调用它的add方法。
  69.                 MyClass my1 = (MyClass) (in.readObject());
  70.                 System.out.println(my1.toString());
  71.                 in.close();
  72.                 // 当恢复对象的时候,对象中的所有域被自动的恢复。如果不希望某个域被序列化,可以在它前面
  73.                 // 加上transient关键字,例如下面的代码:transient int noSer = 0;
  74.                 // 类似的,如果类中的某个域为静态,它不会被序列化。
  75.         }
  76.  
  77.         /**
  78.          * @param args
  79.          */
  80.         public static void main(String[] args) throws Exception {
  81.                 String fileName = "c:/temp/MyClass.ser";
  82.                 SerializeObject.serialize(fileName);
  83.                 // 注释掉第二行,只运行下面一行,将会发现输出不同
  84.                 SerializeObject.deserialize(fileName);
  85.         }
  86. }
  87.  

回复 "java 序列化与反序列化的使用"

这儿你可以回复上面这条便签

captcha