transient关键字_瞬态关键字, InvalidClassException异常_原理和解决方案

transient关键字_瞬态关键字:
static关键字:静态关键字

静态优先于非静态加戟到内存中(静态优先于对象进入到内存中)

被static修饰的成员变量不能被序列化的,序列化的都是对象

private static int age;

stream. writeobject(new Person("将神”,19) );

Object object = stream.regdobject();

Person{name="将神',age=o}

 

transient关键字:瞬态关键字:

被transient修饰成员变量,不能被序列化

private trgnsient int age;

stream.writeobject( new Person(""将神”,19));

object object = stream.readobject()

Person{name="将神',age=o}

/**
 * static关键字:静态关键字
 * 静态优先于非静态加戟到由存中(静态优先于对象进入到内存中)
 * 被static修饰的成员变量不能被序列化的,序列化的都是对象
 * private static int age;
 * stream.writeobject( new Person("将神",19));
 * 0bject object = stream.readobject();
 * Person{name="将神',age=0}
 *
 * transient关键字:瞬态关键字
 * 被transient修饰成员变量,不能被序列化
 */
public class Person implements Serializable {
    private String name;
    private transient int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Person() {

    }

    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 "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public class xuliehua {
    public static void main(String[] args) throws IOException {
        //1.创建objectoutputstream对象,构造方法中传递字节输出流
        ObjectOutputStream stream = new ObjectOutputStream(new FileOutputStream("liushuai.txt"));
        //2.使用objectoutputstream对象中的方法writeobject,把对象写入到文件中
        stream.writeObject(new Person("将神",19));
        //3.释放资源
        stream.close();
    }
}
public class fanxuliehua {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //1.创建objectInputstream对象,构造方法中传递字节输入流
        ObjectInputStream stream = new ObjectInputStream(new FileInputStream("liushuai.txt"));
        //2.使用objectInputstream对象中的方法readobject读取保存对象的文件
        Object object = stream.readObject();
        //3.释放资源
        stream.close();
        //4.使用读取出来的对象(打印)
        System.out.println(object);
        Person pe = (Person)object;
        System.out.println(pe.getName()+pe.getAge());
    }

 

 

 

 

 

 

InvalidClassException异常_原理和解决方案:

 

 解决方案:

无论是香对类的定义进行修改都不重新生成新的序列号

可以手动给类添加一个序列号

格式在Serializable接口规定:

可序列化类可以通过声明名为“serialVersionUID”的字段(该字段必须是静态(static)、最

终(final)的long型字段)显式声明其自己的serialVersionUID:

public class Person implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name;
    public  int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Person() {

    }

    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 "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public class xuliehua {
    public static void main(String[] args) throws IOException {
        //1.创建objectoutputstream对象,构造方法中传递字节输出流
        ObjectOutputStream stream = new ObjectOutputStream(new FileOutputStream("liushuai.txt"));
        //2.使用objectoutputstream对象中的方法writeobject,把对象写入到文件中
        stream.writeObject(new Person("将神",19));
        //3.释放资源
        stream.close();
    }
}
public class fanxuliehua {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //1.创建objectInputstream对象,构造方法中传递字节输入流
        ObjectInputStream stream = new ObjectInputStream(new FileInputStream("liushuai.txt"));
        //2.使用objectInputstream对象中的方法readobject读取保存对象的文件
        Object object = stream.readObject();
        //3.释放资源
        stream.close();
        //4.使用读取出来的对象(打印)
        System.out.println(object);
        Person pe = (Person)object;
        System.out.println(pe.getName()+pe.getAge());
    }
}

 

posted @ 2022-07-18 09:37  冰灵IT  阅读(38)  评论(0)    收藏  举报