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

IO流反序列化在java中的实现,第1张

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/3017695.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-28
下一篇 2022-09-28

发表评论

登录后才能评论

评论列表(0条)

保存