使用ObjectInputStream将对象存储到arraylist时遇到问题

时间:2015-12-01 17:48:30

标签: java deserialization objectinputstream

好的,我只是将我的代码更改为在while循环中使用true。现在当它从文件中读取时,我得到一个流损坏的异常。冷,这是因为obin不是新的。

私有类viewStudentListener实现ActionListener     {         public void actionPerformed(ActionEvent e)         {
                尝试{

let myClass1 = factory.createInstance(className: "MyClassName")

}     }

这是文件的编写方式

                ArrayList<Student> students =  new ArrayList<Student>();
                FileInputStream fin = new FileInputStream("Students.bin");
                ObjectInputStream obin = new ObjectInputStream(fin);
                int id = Integer.parseInt(ID.getText());
                int count = 0;
                    while(true)
                    {   
                        try{
                        Student s = (Student) obin.readObject();
                        students.add(s);



                    }                       
                    catch(EOFException eofException){
                        break;
                    }

                    }
                    while (count < students.size())
                    {
                        if(students.get(count).equals(id))
                            {
                                fName.setText(students.get(count).getFirstName());
                                lName.setText(students.get(count).getLastName());
                            }
                        count++;
                    }


            }
             catch (FileNotFoundException e1) {

                e1.printStackTrace();
            } catch (IOException e1) {

                e1.printStackTrace();
            } catch (ClassNotFoundException e1) {

                e1.printStackTrace();
            }

}

1 个答案:

答案 0 :(得分:0)

available() > 0不是流结束的有效测试。见Javadoc。

正确的方式是通过while (true)读取您的信息流,直到EOFException被抛出。