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()); } }
浙公网安备 33010602011771号