1 序列化
1.1 序列化概述
Java中提供了一种序列化操作的方式,用一个字节序列化来表示一个对象,该字节序列化中保存了==【对象的属性】,【对象的类型】和【对象的数据】。把字节序列化保存到文件中,就可以做到持久化==保存数据内容。
从文件中读取字节序列化数据,可以直接得到对应的对象。
1.2 ObjectOutputStream类
将对象数据序列化,保存到文件中
构造方法 Constructor
ObjectOutputStream(OutputStream out);
输出字节流对象作为当前方法的参数
1.3 ObjectInputStream类
从文件中读取被序列化之后的字节数据,提供反序列化操作,得到一个对象。
构造方法 Constructor
ObjectInputStream(InputStream in);
需要提供一个字节输入流对象来进行操作
1.4 序列化注意事项
1. 如果一个类需要进行序列化操作,必须遵从。java.io.Serializable。不遵从无法进行序列化操作
2. 序列化之后从文件中读取序列化内容,转换成对应的对象,
ClassNotFoundException 对应类没有找到。
对应的类型没有导包,不存在…
InvalidClassException 类型不一样
序列化之后的每一个类都会有一个serialVersionUID,该编号在使用过程中,序列化
和反序列化必须一致
3. transient 修饰的成员变量不能被序列化
2 代码示例如下
Person.java
package com.qf.d_objectSerializable;
import java.io.Serializable;
public class Person implements Serializable{
/**
* 序列化编号
*/
private static final long serialVersionUID = 1L;
private int id;
private String name;
private int age;
public Person() {
}
public Person(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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 [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
Demo1.java
package com.qf.d_objectSerializable;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
public class Dome2 {
/**
* @param args
*/
public static void main(String[] args) {
readList();
}
private static void readList() {
ObjectInputStream objectInputStream = null;
try {
objectInputStream = new ObjectInputStream(new FileInputStream("G:\\test\\aaa\\person.txt"));
ArrayList<Person> list = (ArrayList<Person>) objectInputStream.readObject();
for (Person person : list) {
System.out.println(person);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (objectInputStream != null) {
try {
objectInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
private static void writeList() {
ArrayList<Person> persons = new ArrayList<Person>();
persons.add(new Person(1, "老肖", 60));
persons.add(new Person(2, "老刘", 66));
persons.add(new Person(3, "老李", 61));
persons.add(new Person(4, "老王", 56));
persons.add(new Person(5, "老高", 55));
ObjectOutputStream objectOutputStream = null;
try {
objectOutputStream = new ObjectOutputStream(new FileOutputStream("G:\\test\\aaa\\person.txt"));
objectOutputStream.writeObject(persons);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (objectOutputStream != null) {
try {
objectOutputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}