0

Student[]配列オブジェクトの記述された出力を読み取るクラスがあります

これがコードです

import java.io.*;

// I use this class to read the final ouput "students_updated.dat"
public class StudentArrayObjectFileReader {

public static void main(String[] args) {
    try {
        ObjectInputStream fileReader = new ObjectInputStream(new FileInputStream("students_updated.dat"));
        Student[] studs = (Student[]) fileReader.readObject();
        fileReader.close();

        // List the records in console
        for (int i = 0; i < studs.length; i++) {
            System.out.printf("%7d %-35s %-5s %1d %-6s%n",studs[i].getID(), studs[i].getName(), studs[i].getCourse(), studs[i].getYr(), studs[i].getGender());
        }
    } catch (FileNotFoundException fnfe) {

        fnfe.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
 }
}

問題は、読み取り時にエラーが発生することです。Student[] studs = (Student[]) fileReader.readObject();

ここに述べられているように

java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2571)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1315)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
at StudentArrayObjectFileReader.main(StudentArrayObjectFileReader.java:9)

何が問題になるのかについて何か考えはありますか?前もって感謝します..

これstudents_updated.datが書かれた方法です

    public void saveStudentArray() { // studs print to student_updated.dat
    try{
        output.writeObject(studs); // write the final studs
        output.close();
    }catch(Exception e){
        e.printStackTrace();
    }
}

このメソッドがどこにあるかのコンストラクターでObjectInputStream宣言されています

4

2 に答える 2

1

この行を移動します:

fileReader.close();

forループの後。

Javaでは、変数の作成は単にメモリ内のある場所への参照を作成することです。fileReader読み取ったオブジェクトを生徒の配列にキャストするという行為は、メモリ内の正しい場所へのポインタを作成するだけです。次に、fileReaderを閉じてその場所を削除すると、ポイントしている場所が削除studsされます。

于 2012-07-06T16:40:25.017 に答える
1

Student_updated.datファイルの内容を確認してください。readObject()関数は、ファイルにシリアル化されたオブジェクトが含まれていることを想定しています。

ファイルにはシリアル化されたオブジェクトが含まれていますか?何も問題なくシリアル化が成功したかどうかを確認しますか?

プレーンテキストファイルから配列を作成しようとしている場合は、readObject()を使用しないでください。

アレイをシリアル化および逆シリアル化する方法のサンプルについては、このリンクにアクセスしてください-アレイを直接シリアル化できますか...

于 2012-07-06T17:00:40.310 に答える