通过ObjectInputStream读取对象会引发EOF异常



我正在尝试通过ObjectInputStream读取对象。但是,我使用EOFException:检索以下堆栈

java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2325)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2794)
at
java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:801)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
at student.operations.StudentOperations.addStudentDetails(StudentOperations.java:46)
at student.

我的代码如下:

FileInputStream fi = new        FileInputStream(file.getPath());
ObjIn = new ObjectInputStream(fi);
FileOutputStream fo = new FileOutputStream(file.getPath());
Objout = new ObjectOutputStream(fo);
//bo = new BufferedOutputStream(Objout);
//bi = new BufferedInputStream(ObjIn);
System.out.println("Enter the number of students to add");
number = in.nextInt();
System.out.println("Enter Student roll number:");
int rollno = in.nextInt();
try {
    HashMap<Integer, StudentModel> hs = (HashMap<Integer, StudentModel>) ObjIn
            .readObject();
    if (hs.containsKey(rollno)) {
        System.out.println("Duplicate values are not allowed ");
    } else {
        for (counter = 0; counter < number; counter++) {
            System.out.println("Enter Student name:");
            String name = in.next();
            System.out.println("Enter Student's Father name:");
            String fname = in.next();
            System.out.println("Enter Gender:");
            String gender = in.next();
            System.out.println("Enter Date of birth:");
            String date = in.next();
            SimpleDateFormat dateFormat = new SimpleDateFormat(
                    "dd-MM-yyyy");
            Date dateObj = null;
            try {
                dateObj = dateFormat.parse(date);
            } catch (ParseException e) {
                System.out.println(e);
            }
            Calendar birthday = Calendar.getInstance();
            birthday.setTimeInMillis(dateObj.getTime());
            Calendar current = Calendar.getInstance();
            long currentTime = System.currentTimeMillis();
            current.setTimeInMillis(currentTime);
            int age = current.get(Calendar.YEAR)
                    - birthday.get(Calendar.YEAR);
            System.out.println("Enter the AddressLine1:");
            String address1 = in.next();
            in.nextLine();
            System.out.println("Enter the AddressLine2:");
            String address2 = in.next();
            in.nextLine();
            System.out.println("Enter the city");
            String city = in.next();
            in.nextLine();
            System.out.println("Enter the state");
            String state = in.next();
            in.nextLine();
            System.out.println("Enter the country:");
            String country = in.next();
            in.nextLine();
            System.out.println("Enter the Zipcode");
            int code = in.nextInt();
            in.nextLine();
            StudentUtill.student.put(rollno, new StudentModel(name,
                    fname, rollno, age, gender, dateObj, address1,
                    address2, city, state, country, code));
            Objout.writeObject(StudentUtill.student.toString());

            Objout.flush();
        }// for loop ends here

tester.StudentTester.main(StudentTester.java:30)

  • 您正试图从一个空文件中读取对象。看看堆栈跟踪。尝试读取标头的文件结束。文件中甚至没有标头,更不用说对象了。它是空的。

  • 在有东西要写之前,不要创建FileOutputStream,也不要忘记在写完之后立即关闭它。

  • 在将映射写入文件之前,您也会错误地将其转换为String,但您还没有到出现问题的地步。

最新更新