Tôi đã có cùng một vấn đề ngay hôm nay. Mặc dù câu hỏi là khá cũ, vấn đề vẫn còn và không có giải pháp sạch được cung cấp. Bỏ qua EOFException
nên tránh vì nó có thể bị ném khi một số đối tượng không được lưu chính xác. Viết null rõ ràng ngăn cản bạn sử dụng các giá trị null cho bất kỳ mục đích nào khác. Cuối cùng, sử dụng available()
trên luồng đối tượng luôn trả về số không, vì số lượng đối tượng không xác định.
Giải pháp của tôi khá đơn giản. ObjectInputStream
chỉ là trình bao bọc cho một số luồng khác, chẳng hạn như FileInputStream. Mặc dù ObjectInputStream.available()
trả về 0, FileInputStream.available sẽ trả về một số giá trị.
FileInputStream istream = new FileInputStream(fileName);
ObjectInputStream ois = new ObjectInputStream(istream);
/** calculate number of items **/
int line_count = 0;
while(istream.available() > 0) // check if the file stream is at the end
{
(String)ois.readObject(); // read from the object stream,
// which wraps the file stream
line_count++;
}
Tôi đang làm điều tương tự - nhưng tôi đang điều chỉnh nhật ký hoạt động. Tôi muốn nó đợi cho đến khi có nhiều dữ liệu hơn miễn là chương trình đang viết, nhưng hãy cho tôi biết khi nào nó được viết xong. Tôi không chắc chắn nếu có bất kỳ cách nào để làm điều này mà không bị bắt ngoại lệ. (Phần tailing hoạt động tốt, nó chỉ nhận được nó để thoát khi nó được thực hiện đó là bugging tôi) –