01/10/2018, 00:21

[Nhờ sửa lỗi]EOFException khi đọc danh sách đối tượng đã được ghi từ file

Mọi người cho em hỏi, em đã ghi 4 đối tượng HocSinh ra 1 file, bây giờ em đọc file đó để lấy các đối tượng ra.
Em làm theo 2 cách:
####Cách 1:

Giả định biết số đối tượng trong file (bằng 4) thì chương trình chạy đúng.

for (int i = 0; i < 4; i++) {
    obj = ois.readObject();                //ois là 1 đối tượng ObjectInputStream
    HocSinh hs = (HocSinh) obj;
    System.out.println(hs);
}

####Cách 2:

Em chạy cách 2 thì vẫn ra được đủ 4 đối tượng nhưng kèm theo Error.

while((obj = ois.readObject())  != null) {
    HocSinh hs = (HocSinh) obj;
    System.out.println(hs);
}

Mọi người giải thích giúp em cách 2 sai ở đâu với ạ!
Em cảm ơn!

Quân viết 02:32 ngày 01/10/2018

First of all, readObject() only returns null if you wrote null to the stream when creating it. If there is no more data in the stream, it will throw an EOFException.

If you don’t expect the EOF, the reason is probably that the stream is corrupt. This can happen if you forget to close it after writing data to it.

Đỗ Trung Quân viết 02:30 ngày 01/10/2018

Lỗi này xảy ra khi chương trình (ios.read) hiểu hoặc hiểu nhầm là đã đến cuối file và không tìm thấy data nữa.

Giải pháp cho vấn đề này

  1. Cần có 1 cơ chế đếm số lượng object khi ghi vào file. Lúc đọc ra em dùng theo vòng loop với size là số lượng khi ghi file theo cách 1 của em
  2. Đọc các object cho vào List như arraylist hay linkedlist sau đó đọc list
  3. Sử dụng trycatch để bắt exception thôi
Bài liên quan
0