在我们把字符转化后,有些人不会使用反序列化把对象转换。在反序列化的只要两个步骤即可达成:创建、调用。同时我们要注意使用时要找到class类,不然会出现报错的问题。下面我们就反序列化的概念进行讲解,同时指出使用时的注意事项,最后为大家带来代码方面的实例。
1.反序列化概念
就是从 IO流中恢复对象。
步骤一:创建 ObjectInputStream 输入流。
步骤二:调用ObjectInputStream对象的readObject()得到序列化的对象。
2.注意
对于JVM可以反序列化对象,它必须是能够找到class文件的类。如果找不到该类的class文件,则抛出一个 ClassNotFoundException 异常。
另外,当JVM反序列化对象时,能找到class文件,但是class文件在序列化对象之后发生了修改,那么反序列化操作也会失败,抛出一个InvalidClassException异常。
发生这个异常的原因如下:
(1)该类的序列版本号与从流中读取的类描述符的版本号不匹配
(2)该类包含未知数据类型
(3)该类没有可访问的无参数构造方法
Serializable 接口给需要序列化的类,提供了一个序列版本号。serialVersionUID 该版本号的目的在于验证序列化的对象和对应类是否版本匹配。
// 加入序列版本号 private static final long serialVersionUID = 1L;
3.实例
public class SerializeNY {
public static void main(String[] args) throws IOException, ClassNotFoundException {
serializeNY();
NY ny = deserializeNY();
System.out.println(ny.toString());
}
private static void serializeNY() throws IOException {
NY ny = new NY();
ny.setName("NY");
ny.setBlogName("NYfor2020");
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("D:\serialable.txt")));
oos.writeObject(ny);
System.out.println("NY 对象序列化成功!");
oos.close();
}
private static NY deserializeNY() throws IOException, ClassNotFoundException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("D:\serialable.txt")));
NY ny = (NY) ois.readObject();
System.out.println("NY 对象反序列化成功");
return ny;
}
}运行结果为:
NY 对象序列化成功!
NY 对象反序列化成功
NY{name='NY', blogName='NYfor2020'}以上就是IO流反序列化在java中的实现,在使用注意事项上大家不要忽略掉了,不然报错问题很难处理。学会后就可以把对象和字节进行相互转换了。



