Java对象的序列化和反序列化
Posted 路上的风景
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java对象的序列化和反序列化相关的知识,希望对你有一定的参考价值。
package com.fgy.demo2; import java.io.Serializable; /** * 想要实现序列化,必须实现Serializable接口 */ public class Person implements Serializable { private String name; private transient Integer age; public Person() { } public Person(String name, Integer age) { this.name = name; this.age = age; } @Override public String toString() { return "Person{" + "name=‘" + name + ‘‘‘ + ", age=" + age + ‘}‘; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
package com.fgy.demo2; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; /** * 序列化 */ public class Demo01ObjectOutputStream { public static void main(String[] args) throws IOException { Person p = new Person("lily", 18); ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d:\a.txt")); oos.writeObject(p); oos.close(); } }
package com.fgy.demo2; import java.io.FileInputStream; import java.io.IOException; import java.io.ObjectInputStream; /** * 反序列化 */ public class Demo02ObjectInputStream { public static void main(String[] args) throws IOException, ClassNotFoundException { ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d:\a.txt")); Person obj = (Person) ois.readObject(); ois.close(); System.out.println(obj.getName() + "--" + obj.getAge()); // lily--null } }
注意:
被static修饰的成员变量不能被序列化,序列化的都是对象。
被transient修饰的成员变量不能被序列化
解决java.io.InvalidClassException异常的方式:序列化对象添加成员变量 private static final long serialVersionUID = XXXL
以上是关于Java对象的序列化和反序列化的主要内容,如果未能解决你的问题,请参考以下文章