zoukankan      html  css  js  c++  java
  • 序列化问题 看过

    案例: 演示序列化流之 发序列化操作.

    反序列化详解:
    概述:
    反序列化指的是从文件中 加载对象.
    涉及到的流是: ObjectInputStream(对象反序列化流)
    构造方法:
    public ObjectInputStream(InputStream is);
    成员方法:
    public Object readObject(); 从文件中读取对象, 也叫: 反序列化操作.

    细节:
    1. 要进行序列化或者反序列化操作的对象, 其所属的类必须实现 Serializable 接口.
    2. Serializable 接口是一个标记接口, 里边没有任何成员.

    关于序列化和反序列化操作的三个小问题:
    问题1: 用对象序列化流序列化了一个对象后,假如我们修改了对象所属的类文件,读取数据会不会出问题呢?
    答案: 会出问题,会抛出InvalidClassException异常

    问题2: 如果出问题了,如何解决呢?
    答案;
    方式1: 重新序列化一次.
    方式2: 我们给对象所属的类, 自定义一个serialVersionUID.
    private static final long serialVersionUID = 2L;

    问题3: 如果类中的某一个属性, 不想实现 序列化怎么办?
    答案: 可以通过 transient 关键字实现.

    transient 关键字解释:
    它是一个关键字, 表示 瞬态的意思, 被它修饰的内容, 不能被实现序列化和反序列化操作.
    */
    public class Demo02 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
    //1. 创建反序列化流, 关联数据源文件.
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream("day13/data/2.txt"));
    //2. 从文件中读取对象, 即: 反序列化操作.
    Student s = (Student)ois.readObject();
    //3. 打印结果.
    System.out.println(s);
    }
    }

  • 相关阅读:
    PHP 将二维数组中某列值作为数组的键名
    MySQL 8下忘密码后重置密码
    单一职责原则
    Linux下安装SVN服务端小白教程
    go 代码玩耍
    centos7 docker开启认证的远程端口2376配置教程
    Dockerfile RUN,CMD,ENTRYPOINT命令区别
    wait-for-it.sh脚本控制docker-compose启动顺序详解
    阿里云服务器漏洞修复_2020.5.22
    Let's Encrypt 免费通配符 SSL 证书申请教程
  • 原文地址:https://www.cnblogs.com/shan13936/p/13904967.html
Copyright © 2011-2022 走看看