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接口----可实现部分属性的序列化(不常用)
在编写项目时,可自己创建序列化和反序列化工具类。其中提到Externalizable接口,它能实现部分属性的序列化,但不常用。
1706

被折叠的 条评论
为什么被折叠?



