java反序列化基础(一)

Java序列化与反序列化

介绍

Java序列化就是指把Java对象转换为字节序列的过程,反序列化就是指把字节序列恢复为Java对象的过程。

作用

序列化最重要的作用:在传递和保存对象时.保证对象的完整性和可传递性。对象转换为有序字节流,以便在网络上传输或者保存在本地文件中。

反序列化的最重要的作用:根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。

总结:核心作用就是对象状态的保存和重建。(整个过程核心点就是字节流中所保存的对象状态及描述信息)

利用代码

首先创建一个Person类,保证其继承Serializable使其可以被进行序列化反序列化操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package org.example;

import java.io.Serializable;

public class Person implements Serializable {

public String name;
private int age;

public Person(String name, int age){
this.name = name;
this.age = age;
}

}

序列化的过程。通过ObjectOutputStream创建ser.bin文件,并且通过writeObject将序列化的字节流写入ser.bin。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package org.example;

import java.io.*;

public class serializeTest {
public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchFieldException, IllegalAccessException {

Person person = new Person("aa",22);
serialize(person);

}
public static void serialize(Object obj) throws IOException{
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("ser.bin"));
oos.writeObject(obj);
}
}

反序列化的过程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package org.example;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class UnserializeTest {
public static Object unserialize(String Filename) throws IOException, ClassNotFoundException{
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(Filename));
Object obj = ois.readObject();
System.out.println(obj);
return obj;
}

public static void main(String[] args) throws Exception{
Person person = (Person) unserialize("ser.bin");
System.out.println(person);
}
}

ser.bin内容

bin文件


java反序列化基础(一)
https://fliggyaa.github.io/2023/10/17/2023-10-17-java反序列化基础/
作者
fliggy
发布于
2023年10月17日
许可协议