技术文章 > java >  java基础 > 正文

IO流反序列化在java中的实现

小妮浅浅

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

免费视频教程
本文原创发布python学习网,转载请注明出处,感谢您的尊重!
相关文章
 IO字节流在java中的使用
 java IO字符流的用法
 java字符流和字节流替换方法
 java中File类的使用
 java IO流效率对比
 IO流在java中的实例操作
 java IO流序列化的概念
相关视频章节
 网络爬虫
 云端部署Web应用程序视频
 Web应用框架Flask和文件模板
 Web应用程序开发概述
 继承和多态
作者信息
推荐视频
视频教程分类