繁体   English   中英

反序列化返回 null object Java

[英]Deserializing returns null object Java

目前正在编写一个像Booking这样的应用程序,我正处于我想将我的信息存储在文件中的阶段。 我创建了一个可Serializable Database class,它有一个带有路径名的字段和 2 种读/写方法。 我有大约 8 个其他类扩展了数据库,每个类都包含一个Hashmap和一些查询方法。 自然地,我在启动应用程序之前从文件中读取了Databases ,并在退出之前写入,但我遇到了一个问题,我正在读取的对象都是null 我已经做了 2 个小时了,我需要第二个意见。 这是数据库的读/写方法:

public void write() {
        try {
            File temp = new File(this.filename);
            temp.createNewFile(); // create file if not present
            FileOutputStream fileOut = new FileOutputStream(this.filename);
            ObjectOutputStream objectOut = new ObjectOutputStream(fileOut);
            objectOut.writeObject(this);
            objectOut.close();
            System.out.println("The Object  was successfully written to a file");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public Object read() {
        Object obj = null;
        try {
            File temp = new File(this.filename);
            temp.createNewFile(); // create file if not present
            FileInputStream fileIn = new FileInputStream(this.filename);
            ObjectInputStream objectIn = new ObjectInputStream(fileIn);
            obj = objectIn.readObject();
            System.out.println("The Object was successfully read from the file");
            objectIn.close();
        } catch (EOFException ex) {
            return obj;
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

这是我在我的Application class 中加载它们的方式(这可能是问题所在)

private void loadData() {
        accommodationReviewsDatabase = (AccommodationReviews) accommodationReviewsDatabase.read();
        brokerAccommodationsDatabase = (BrokerAccommodations) brokerAccommodationsDatabase.read();
        credentialsUserDatabase = (CredentialsUser) credentialsUserDatabase.read();
        customerReviewsDatabase = (CustomerReviews) customerReviewsDatabase.read();
        userConfirmationsDatabase = (UserConfirmations) userConfirmationsDatabase.read();
        userMessagesDatabase = (UserMessages) userMessagesDatabase.read();
    }

    private void writeData() {
        accommodationReviewsDatabase.write();
        brokerAccommodationsDatabase.write();
        credentialsUserDatabase.write();
        customerReviewsDatabase.write();
        userConfirmationsDatabase.write();
        userMessagesDatabase.write();
    }

可能会询问的一些额外信息:

  • 我存储的所有类都是可序列化的
  • 我存储数据库的文件都是 *.ser (这是我找到的扩展名)
  • 文件存储在项目中

如果您的read()方法在没有 EOFException 的情况下完成,则它以return null; . 你应该return obj; ,您阅读的 object。

如果您的读取成功,您不应该期望 EOFException 会被抛出。 EOFException 表示它在尝试读取您的 object 时用完了数据,并且无法成功完成。

如果确实收到 EOFException,最好给出一些指示而不是静默返回。 静默 catch 块拒绝您提供可能对调试有用的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM