• java对象序列化流和反序列化流


    首先创建一个学生类
    `import java.io.Serializable;

    public class Student implements Serializable {

    private static final long serialVersionUID = 42L;
    
    private String name;
    //private int age;
    private transient int age;
    
    public Student() {
    }
    
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public int getAge() {
        return age;
    }
    
    public void setAge(int age) {
        this.age = age;
    }
    

    // @Override
    // public String toString() {
    // return "Student{" +
    // "name='" + name + ''' +
    // ", age=" + age +
    // '}';
    // }
    }`
    然后创建一个序列化流和反序列化流
    1、用对象序列化流序列化了一个对象后,假如我们修改了对象所属的类文件,读取数据会不会出问题呢?
    java.io.InvalidClassException:
    当序列化运行时检测到类中的以下问题之一时抛出。
    类的串行版本与从流中读取的类描述符的类型不匹配
    该类包含未知的数据类型
    该类没有可访问的无参数构造函数

        com.itheima_03.Student; local class incompatible:
        stream classdesc serialVersionUID = -3743788623620386195,
        local class serialVersionUID = -247282590948908173
    

    2、如果出问题了,如何解决呢?
    给对象所属的类加一个值:private static final long serialVersionUID = 42L;

    3、如果一个对象中的某个成员变量的值不想被序列化,又该如何实现呢?
        private transient int age;
    

    `
    import java.io.*;

    /*

    */

    public class ObjectStreamDemo {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
    //write();
    read();
    }

    //反序列化
    private static void read() throws IOException, ClassNotFoundException {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("oos.txt"));
    
        Object obj = ois.readObject();
    
        Student s = (Student) obj;
        System.out.println(s.getName() + "," + s.getAge());
    }
    
    //序列化
    private static void write()throws IOException {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("oos.txt"));
    
        Student s = new Student("林青霞",30);
    
        oos.writeObject(s);
    
        oos.close();
    }
    

    }
    `

  • 相关阅读:
    在iOS 11上出现libsystem_kernel.dylib`__abort_with_payload崩溃问题的解决
    Mac上安装软件出现“XXXX”已损坏,打不开,你应该将它移到废纸篓 的问题解决
    iOS10.3系统以后(NSStrikethroughStyleAttributeName)富文本删除线失效不显示的坑
    Mac终端操作命令
    解决设置selectedBackgroundView后会把cell上带背景颜色的控件遮住的问题
    iOS开发字体大全
    UITapGestureRecognizer的用法
    UIButton设置图片和标题上下垂直分布的总结
    Xcode8.3.2制作静态库
    多线程
  • 原文地址:https://www.cnblogs.com/zhaoxiangjun/p/12987108.html
Copyright © 2020-2023  润新知