在我们把字符转化后,有些人不会使用反序列化把对象转换。在反序列化的只要两个步骤即可达成:创建、调用。同时我们要注意使用时要找到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中的实现,在使用注意事项上大家不要忽略掉了,不然报错问题很难处理。学会后就可以把对象和字节进行相互转换了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)