java-序列化和反序列化
Posted 小丑quan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java-序列化和反序列化相关的知识,希望对你有一定的参考价值。
序列化和反序列化的图示:
简单来讲,序列化就是将对象写入文件当中去
反序列化就是将对象从文件中读取出来
关于类
ObjectOutputStream
准备写入 的累:
import java.io.Serializable; public class Person implements Serializable { private String name; private int age; public Person(){ } @Override public String toString() { return "Person{" + "name=\'" + name + \'\\\'\' + ", age=" + age + \'}\'; } public Person(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; } }
写入:
public class Demo66 { public static void main(String[] args) throws IOException { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("C:\\\\Users\\\\quan\\\\Desktop\\\\练习\\\\src\\\\code\\\\haotusay.txt")); oos.writeObject(new Person("aa",22)); oos.close(); } }
public class Demo66 { public static void main(String[] args) throws IOException, ClassNotFoundException { ObjectInputStream ois = new ObjectInputStream(new FileInputStream("C:\\\\Users\\\\quan\\\\Desktop\\\\练习\\\\src\\\\code\\\\haotusay.txt")); Object o = ois.readObject(); ois.close(); System.out.println(o); Person person = (Person)o; System.out.println(person.getAge()+person.getName()); } //结果Person{name=\'aa\', age=22} //22aa }
transient关键字====表示不能被序列化
InvalidClassException异常
练习序列化集合
/* 当我们新爱国再文件中保存多个对象的时候,可以把多个对象存储到一个集合中 对象集合进行序列化和反序列化 因为我们不能向一个文件当中写入多个对象 11定义一个存储person对象的集合arraylist集合 22集合加入对象 33创建序列化流ObjectOutputStream对象 44使用ObjectOutputStream对象的方法writeObject对象,对集合进行序列号 55创建一个反序列化objectinputStream对象 66使用方法readObject 读取保存的集合 77把Object 类型的集合转换为Arraylist 类型 88遍历集合输出 99释放资源 */
public class Demo66 { public static void main(String[] args) throws IOException, ClassNotFoundException { ArrayList<Person> list = new ArrayList<>(); list.add(new Person("AA",11)); list.add(new Person("BB",22)); list.add(new Person("CC",33)); ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("C:\\\\Users\\\\quan\\\\Desktop\\\\练习\\\\src\\\\code\\\\haotusay.txt")); oos.writeObject(list); ObjectInputStream ois = new ObjectInputStream(new FileInputStream("C:\\\\Users\\\\quan\\\\Desktop\\\\练习\\\\src\\\\code\\\\haotusay.txt")); Object o = ois.readObject(); ArrayList<Person> arrayList = (ArrayList<Person>)o; for (Person person:arrayList) { System.out.println(person); } } } /*结果 Person{name=\'AA\', age=11} Person{name=\'BB\', age=22} Person{name=\'CC\', age=33} */
以上是关于java-序列化和反序列化的主要内容,如果未能解决你的问题,请参考以下文章