栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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中的实现,在使用注意事项上大家不要忽略掉了,不然报错问题很难处理。学会后就可以把对象和字节进行相互转换了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/15271.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号