Java序列化是指将对象转换为字节序列的过程,反序列化则是将字节序列转换为对象的过程。当我们需要通过网络或文件传输Java对象时,必须先将对象进行序列化。序列化和反序列化有助于在不同系统之间传输对象状态。为了实现序列化,首先目标对象需要实现Serializable接口,并且生成一个版本号。例如,创建一个Stude...
什么是java的序列化和反序列化?
Java序列化是指将对象转换为字节序列的过程,反序列化则是将字节序列转换为对象的过程。当我们需要通过网络或文件传输Java对象时,必须先将对象进行序列化。序列化和反序列化有助于在不同系统之间传输对象状态。
为了实现序列化,首先目标对象需要实现Serializable接口,并且生成一个版本号。例如,创建一个Student类:
public class Student implements Serializable {
private static final long serialVersionUID = 3404072173323892464L;
private String name;
private transient String id;
private String age;
//省略其他方法和属性}
serialVersionUID用于区分不同版本的类,防止反序列化时版本不一致。transient关键字用于忽略不希望序列化的变量。
序列化方式包括内置的writeObject()和readObject()方法。通过ObjectOutputStream类中的writeObject()方法将对象写入文件,使用ObjectInputStream类中的readObject()方法从文件中读取对象。代码示例如下:
public static void main(String[] args) {
File file = new File("D:/test.txt");
Student student = new Student("孙悟空","12");
try {
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file));
outputStream.writeObject(student);
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(file));
Student s = (Student) objectInputStream.readObject();
System.out.println(s.toString());
System.out.println(s.equals(student));
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
此外,还可以自定义序列化和反序列化过程。在Student类中实现writeObject()和readObject()方法,可以控制序列化和反序列化过程。例如:
private void writeObject(ObjectOutputStream objectOutputStream) throws IOException {
objectOutputStream.defaultWriteObject();
objectOutputStream.writeUTF(id);
}
private void readObject(ObjectInputStream objectInputStream) throws IOException, ClassNotFoundException {
objectInputStream.defaultReadObject();
id = objectInputStream.readUTF();
}
通过这种方式,可以实现对特定字段的序列化和反序列化。2024-12-13