java_序列化

Posted aikang525

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java_序列化相关的知识,希望对你有一定的参考价值。

  1 import java.io.*;
  2 
  3 class People implements Serializable {
  4     /*
  5      * 序列化和反序列化的时候,会抛出就NotSerializableException没有序列化异常
  6      * 通过实现java.io.Serializable接口以启动序列化功能,为实现此接口的类将无法使其人格状态序列化或反序列化
  7      * serializable接口也叫标记型接口
  8      * 要进行序列化和反序列化的类必须实现serializable接口,就会给类添加一个标记
  9      * 当进行序列化和反序列化时就会检测类是否有该标记
 10      * 有:可以序列化和反序列化
 11      * 没有:抛出异常
 12      */
 13     private String name;
 14     private int age;
 15 
 16     public People(String name, int age) {
 17         this.name = name;
 18         this.age = age;
 19     }
 20 
 21     public People() {
 22     }
 23 
 24     public String getName() {
 25         return name;
 26     }
 27 
 28     public void setName(String name) {
 29         this.name = name;
 30     }
 31 
 32     public int getAge() {
 33         return age;
 34     }
 35 
 36     public void setAge(int age) {
 37         this.age = age;
 38     }
 39 }
 40 
 41 
 42 public class Test01{
 43     /**
 44      * java.io.ObjectOutputStream extends OutputStream
 45      * 序列化流:ObjectOutputStream
 46      * 作用:把对象以流的方法写入到文件中保存
 47      * <p>
 48      * 构造方法:
 49      * ObjectOutputStream(OutputStream out):创建写入指定OutputStreamde ObjectOutputStream.
 50      * 参数:OutputStream out:字节输出流
 51      * <p>
 52      * 特有成员方法:
 53      * void writObject(Object obj):将指定的对象写入到ObjectOutputStream
 54      * <p>
 55      * 使用步骤:
 56      * 1.创建ObjectOutputStream对象,构造方法中传递字节输出流
 57      * 2.使用ObjectOutputStream对象中的方法WriteObject,把对象写入到文件中
 58      * 3.释放资源
 59      */
 60 
 61     public static void main(String[] args) throws IOException, ClassNotFoundException {
 62         show01();
 63         show02();
 64     }
 65 
 66 
 67     private static void show01() throws IOException {
 68         //1.创建ObjectOutputStream对象,构造方法中传递字节输出流
 69         ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("F:\FileTest\objTest.txt"));
 70         //2.使用ObjectOutputStream对象中的方法WriteObject,把对象写入到文件中
 71         People people = new People("刘备", 18);
 72         oos.writeObject(people);
 73         //3.释放资源
 74         oos.close();
 75     }
 76 
 77     /**
 78      * <p>
 79      * java.io.ObjectInputStream extends InputStream
 80      * 对象反序列化流ObjectInputStream:
 81      * 作用:把文件中保存的对象,以流的方式读取出来
 82      * <p>
 83      * 构造方法:
 84      * ObjectInputStream(InputStream in):
 85      * 参数:
 86      * InputStream in:字节输入流
 87      * 特有的成员方法:
 88      * Object readObject() 从ObjectInputStream读取对象
 89      * 使用步骤:
 90      * 1.创建ObjectInputStream对象,构造方法中传递字节输入流
 91      * 2.使用ObjectInputStream对象中的方法readobject读取保存对象的文件
 92      * 3.释放资源
 93      * 4.使用读取出来对象(打印)
 94      */
 95     public static void show02() throws IOException, ClassNotFoundException {
 96         // 1.创建ObjectInputStream对象,构造方法中传递字节输入流
 97         ObjectInputStream ois = new ObjectInputStream(new FileInputStream("F:\FileTest\objTest.txt"));
 98         //2.使用ObjectInputStream对象中的方法readobject读取保存对象的文件
 99         Object o = ois.readObject();
100         /*readObject方法声明抛出ClassNotFoundException(class文件找不到异常)
101          * 当不存在对象的class文件时抛出此异常类
102          * 反序列化的前提:
103          * 1.类必须实现Serializable
104          * 2.必须存在类对应的class文件
105          */
106         //2.1把类型强转回people类型
107         People o1 = (People) o;
108         System.out.println(o1.getName()+"年龄"+o1.getAge());
109         // 3.释放资源
110         ois.close();
111 
112     }
113 }

 

以上是关于java_序列化的主要内容,如果未能解决你的问题,请参考以下文章

编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议11~15)

这些 C++ 代码片段有啥作用?

[AndroidStudio]_[初级]_[配置自动完成的代码片段]

VSCode 配置 用户自定义代码片段 自定义自动代码补充

[AndroidStudio]_[初级]_[配置自动完成的代码片段]

[AndroidStudio]_[初级]_[配置自动完成的代码片段]