Java
序列化是指把
Java
对象转换为字节序列的过程,
Java
反序列化是指把字节序列恢复为
Java
对象的过
程。通过徐序列化和反序列化实现网络传输、本地存储的目的。
Serializable
实现
Java
序列化
编写项目时,自己创建序列化和反序列化工具类:
import java.io.*;
/**
*文件读写的工具类:方法要静态
*/
public class IOUtil {
/**
* 从指定文件中读数据
* @param fileName
* @return
* @throws IOException
*/
public static Object readFile(String fileName) throws IOException {
FileInputStream fileInputStream = new FileInputStream(fileName);
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
Object o = null;
try {
o = objectInputStream.readObject();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return o;
}
/**
* 写入数据到指定文件
*/
public static void writeFile(Object obj,String fileName) throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream(fileName);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(obj);
}
}
实现部分字段序列化的方式:
1、使用
transient
修饰符
修改实体类,将实体类中不想序列化的属性添加
transient
修饰词。
public class Student implements Externalizable {
private String stuNum;
private transient String stuName;
private transient List<String> teacherList;
......
2、使用
static
修饰符
static
修饰符修饰的属性也不会参与序列化和反序列化。
修改实体类,将实体类中不想序列化的属性添加
static
修饰词。
public class Student implements Externalizable {
private String stuNum;
private static String stuName;
private List<String> teacherList;
......
3、默认方法
writeObject
和
readObject
。 (修改实体类,implements
Serializable,并添加两个方法)
public class Student implements Serializable {
private String stuNum;
private String stuName;
private List<String> teacherList;
private void writeObject(ObjectOutputStream objOut) throws IOException {
System.out.println("writeObject-----------");
objOut.writeObject(stuNum);
objOut.writeObject(stuName);
}
private void readObject(ObjectInputStream objIn) throws IOException, ClassNotFoundException {
System.out.println("readObject-----------");
stuNum = (String) objIn.readObject();
stuName = (String) objIn.readObject();
}
4、Externalizable接口----可实现部分属性的序列化(不常用)