当前位置: 首页 > 知识库问答 >
问题:

ObjectInputStream处理classNotFoundException

阎星河
2023-03-14

我在使用对象输入流从文件中读取数据时遇到问题。请找到下面的代码

File file = new File("model.pst")       
if (file.exists()) {
            fis = new FileInputStream(file);
            in = new ObjectInputStream(fis);
            input = (List<GlobalModel>) in.readObject();
            in.close();
        }

我从ObjectOutpuStreamhttp://docs.oracle.com/javase/6/docs/api/java/io/ObjectOutputStream.html文档中了解到,当将对象写入文件时,对象的默认序列化机制会写入对象的类、类签名以及所有非瞬态和非静态字段的值。我有一个问题,在将对象写入文件后类名已更改,当我使用上述代码读取值时,它会抛出一个class Not异常。我想知道是否有一种方法,我可以处理这个异常,即一旦遇到异常块,我可以将正在读取的对象中的类名替换为新的类名并使其工作吗?

请协助。预先感谢

共有1个答案

危阳
2023-03-14

我自己从来没有这样做过,但应该可以通过创建对象输入流的子类并重写resolveClass方法,http://docs.oracle.com/javase/6/docs/api/java/io/ObjectInputStream.html#resolveClass(java.io.ObjectStreamClass)

 类似资料:
  • 主要内容:1 什么是Java ObjectInputStream,2 Java ObjectInputStream的语法,3 Java ObjectInputStream构造方法,4 Java ObjectInputStream方法1 什么是Java ObjectInputStream java.io.ObjectInputStream类反序列化的原始数据和以前写的对象使用一个ObjectOutputStream。 以下是关于缓冲输入流的要点: 它是用来恢复先前序列化的对象。它确保所有对象的图形

  • 问题内容: 伙计们,我现在感觉真的很愚蠢。…基本上我是通过本地计算机上的TCP连接的…并且当我尝试在客户端创建In / out流时,不会通过创建对象输入流。是什么赋予了?这在打印2之后停止…没有异常或任何事情…这不是我第一次使用此类,这是我感到困惑的部分原因。 问题答案: 根据ObjectInputStream 的规范: 该构造函数将阻塞,直到相应的ObjectOutputStream写入并刷新了

  • 我正在尝试实现一个“帐户”列表的加载/保存,其方法与我成功使用的一个HashMap类似。 背景: 在这里我想设置我的帐户列表包括保存的帐户。 加载/保存实现: 问题是,当我第一次初始化AccountManager时,accounts.ser文件没有保存的帐户,因为该功能是在稍后的方法中实现的,因此给出了以下例外情况: 我尝试在捕获EOFExceptions时将account设置为新的ArrayLi

  • 问题内容: 我正在编程一个类以与服务器进行通信,但是当它尝试在inputstream的帮助下构造ObjectInputStream时,程序将冻结。没有异常,程序仍在运行,但挂在试图构造ObjectInputstream的行中。 这是我的问题所在的方法的代码: 这是整个类的代码: 在查看Google时,我发现了这一点:http : //www.coderanch.com/t/232944/threa

  • 我正试图在服务器端序列化一个HashMap(Tomcat 6 . 0 . 29 ),并在客户端android应用程序上反序列化它。 我第一次尝试这个,我得到了StreamCoruptedExc的,但在我创建了一个全新的servlet与干净的doget/doPost-方法,我已经设法解决了这个问题,不幸的是,我得到了一个EOF异常,而不是。 所以,首先我发布我的代码,然后我将详细解释我的问题: 服务

  • 我在表中总共有8条记录,其中6条在spring批处理调用read时可以使用jpareader。现在我将页面大小和块大小设置为1以进行测试。期望作业运行时,它应该进行6次读取调用,然后它应该逐个处理,逐个写入。但实际上发生的是,它只是调用read 4次(从日志中我可以看到这样读取页面0...1)并处理4个,其中一个由于不匹配写入标准而被过滤掉,然后它只是更新了3个记录,作业标记为成功完成。