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

Java:反序列化和搜索对象时Arraylist序列化错误

徐英锐
2023-03-14

我的项目是关于图书馆管理系统的。我必须将数据存储到类的对象中,然后将它们存储到ArrayList中。然后我在序列化数据。

我有这些功能:

    null
        FileOutputStream fos = null;
        ObjectOutputStream oos = null;

        try {
            fos = new FileOutputStream("Database.ser");
            oos = new ObjectOutputStream(fos);
            oos.flush();
            oos.writeObject(bookData);
            oos.close();
            fos.close();
        }catch(Exception e){
            System.out.println("Exception Caught: "+e);
        }

我用来反序列化的代码:

    FileInputStream fis = null;
    ObjectInputStream ois = null;
    //ArrayList<Books> bookData = null;

    try {
        fis = new FileInputStream("Database.ser");
        ois = new ObjectInputStream(fis);
        bookData = (ArrayList<Library>) ois.readObject();

    }catch(Exception e){
        System.out.println("Exception Caught: "+e);
    }

我得到了一个异常,因为BufferedReader需要是瞬态的,这是修复的。但现在,我认为我的序列化不起作用了。每次我创建一本书,我都将它的索引(对象编号)存储在一个文本文件中。我的搜索技术都不起作用:ArrayIndexOutOfBounds异常被捕获。我试图完成arraylist的大小+1,但这也不起作用。

My code for searching. Before this the deserialization code is there.

try{
        System.out.println("_________________Search Book_________________");
        System.out.println("Enter Title of Book to Search: ");
        String title = scan.readLine();
        for(int i=0;i<bookData.size();i++)
        {
            if(title.equalsIgnoreCase(bookData.get(i).getBookTitle()))
            {
                if(bookData.get(i).getBookId() == getObjCount())
                {
                    System.out.println("Book Found at ["+i+"]");
                    System.out.println("Displaying Book Data....");
                    System.out.println("Book Title    : "+bookData.get(i).getBookTitle());
                    System.out.println("Book Author   : "+bookData.get(i).getBookAuthor());
                    System.out.println("Book Subject  : "+bookData.get(i).getBookSubject());
                    System.out.println("Book Price    : "+bookData.get(i).getBookPrice());
                    System.out.println("No. of Copies : "+bookData.get(i).getAvailableCopies());
                    break; 
                }else{
                    System.out.println("Internal Error Caught.[1] Index Mismatch");
                    //Library.main();
                }
            }
            else{
                status=1;
            }
        }
        if(status == 1)
        {
            System.out.println("Book Not Found.");
        }

共有1个答案

邢英奕
2023-03-14

我不能发布答案,但我会努力帮助您与您的代码。首先,你最好阅读坚实的原则。因为,正如我所看到的,所有代码都在一个类中。它与单一责任原则无关。然后,您必须将Library类拆分为Book(将表示Book)、Library(可选,取决于您的任务)和Book(或Library)Service(将与Library一起工作--添加、删除、更新等。books)。之后,您将能够测试您的代码,您将更快地发现bug。这只是我的观点。

 类似资料:
  • 我试图序列化一个对象数组,并将其写入一个名为address.ser的文件,然后从该文件中读取,反序列化对象数组并显示其属性。我尝试一次序列化整个arrayList(读取时在单个会话中反序列化它),也尝试一个接一个地序列化对象数组的每个对象(读取时一个接一个地反序列化它)。问题是,当从address.ser文件读回来时,我只得到最后一个被写入的对象的数据,而不是其他的。 以下是代码片段: 这是用于将

  • 本文向大家介绍java对象的序列化和反序列化,包括了java对象的序列化和反序列化的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java对象的序列化和反序列化,供大家参考,具体内容如下 1. 什么是序列化        将对象转换为字节流保存起来,比如保存到文件里,并在以后还原这个对象,这种机制叫做对象序列化。(补充一句:把对象保存到永久存储设备上称为持久化) 2. 怎么实现序列化

  • 错误: java.lang.ClassNotFoundException:testprocedure.tp$3在java.net.URLClassLoader$1上运行(未知源)在java.net.URLClassLoader上运行(未知源)在java.security.accessController.doprivileged(本机方法)在java.net.URLClassLoader.find

  • 上下文:我们使用Activiti作为流程引擎,使用Activiti-Rest作为应用程序的接口。由于这个问题与返回由Java序列化的对象的REST服务有关,所以我没有将其添加到标题中。 场景:我们有一个JBoss Wildfly实例,它包含一个EAR和一个包含类“ProcessContext”的模块(为了参考,我们将其称为X)。Activiti在这个EAR中运行,ServiceTasks(从进程中

  • 本文向大家介绍详解Java 对象序列化和反序列化,包括了详解Java 对象序列化和反序列化的使用技巧和注意事项,需要的朋友参考一下 之前的文章中我们介绍过有关字节流字符流的使用,当时我们对于将一个对象输出到流中的操作,使用DataOutputStream流将该对象中的每个属性值逐个输出到流中,读出时相反。在我们看来这种行为实在是繁琐,尤其是在这个对象中属性值很多的时候。基于此,Java中对象的序列

  • 问题内容: 每当我尝试序列化文件时,都会收到错误消息:FileNotFound。不知道为什么。这是我的FileHelper代码: 问题答案: