反序列化代码解析
时间: 2023-07-03 15:25:44 浏览: 54
反序列化的代码如下:
```
public static <T> T fromBytes(byte[] bytes, Class<T> clazz) {
try {
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bis);
Object obj = ois.readObject();
return clazz.cast(obj);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
```
这也是一个泛型方法,用于将字节数组转换为对象。方法接收两个参数,一个是字节数组,另一个是对象的类型 Class。
具体步骤如下:
1. 创建一个 ByteArrayInputStream 对象 bis,用于读取字节数组。
2. 创建一个 ObjectInputStream 对象 ois,用于读取 bis 中的数据并反序列化为对象。
3. 调用 ois.readObject() 方法读取对象。
4. 调用 clazz.cast(obj) 将 Object 类型的对象强制转换为指定类型的对象,并返回该对象。
5. 如果在反序列化过程中出现异常,将打印异常堆栈信息,并返回 null。
需要注意的是,反序列化的对象必须和序列化时的对象类型相同,否则会抛出 ClassCastException 异常。另外,反序列化过程中,读取的字节数组必须是序列化得到的字节数组,否则反序列化会失败。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)