2010-12-28 32 views
5

Tôi có một tệp lớn (cơ sở dữ liệu bài viết Wikipedia tiếng Anh duy nhất dưới dạng tệp XML). Tôi đang đọc một ký tự cùng một lúc bằng cách sử dụng BufferedReader. Mã giả là:BufferedReader sẵn sàng phương pháp trong một vòng lặp while để xác định EOF?

file = BufferedReader... 

while (file.ready()) 
    character = file.read() 

Điều này thực sự có hợp lệ không? Hoặc sẽ ready chỉ cần trả lại false khi nó đang chờ HDD quay trở lại dữ liệu và không thực sự khi đạt được EOF? Tôi đã cố gắng sử dụng if (file.read() == -1) nhưng dường như chạy vào một vòng lặp vô hạn mà tôi thực sự không thể tìm thấy.

Tôi chỉ tự hỏi nếu nó đang đọc toàn bộ tập tin như số liệu thống kê của tôi nói 444.380 trang Wikipedia đã được đọc nhưng tôi nghĩ có nhiều bài viết hơn.

Trả lời

2

Điều này không được đảm bảo để đọc toàn bộ đầu vào. ready() chỉ cho bạn biết liệu luồng cơ bản có sẵn một số nội dung hay không. Ví dụ: nếu nó trừu tượng hóa trên ổ cắm mạng hoặc tệp, điều đó có nghĩa là không có bất kỳ dữ liệu đệm nào có sẵn chưa.

9

Phương pháp Reader.ready() không được dùng để kiểm tra kết thúc tệp. Thay vào đó, nó là một cách để kiểm tra xem liệu gọi read() sẽ chặn.

Cách chính xác để phát hiện bạn đã đạt đến EOF là kiểm tra kết quả cuộc gọi read.

Ví dụ: nếu bạn đang đọc một ký tự tại một thời điểm, phương thức read() trả về một int, hoặc là ký tự hợp lệ hoặc -1 nếu bạn đã đến cuối tệp. Do đó, mã của bạn sẽ trông giống như sau:

int character; 
while ((character = file.read()) != -1) { 
    ... 
} 
Các vấn đề liên quan