Vì vậy, tôi đang cung cấp dữ liệu tệp cho API mất Reader
và tôi muốn có cách báo cáo tiến độ. Có vẻ như việc viết FilterInputStream
thực hiện FileInputStream
, theo dõi số byte được đọc so với tổng kích thước tệp và kích hoạt một số sự kiện (hoặc gọi một số phương thức update()
) để báo cáo tiến trình phân đoạn.Trình bao bọc InputStream hoặc Reader để báo cáo tiến độ
(Ngoài ra, nó có thể báo cáo byte tuyệt đối đọc, và người khác có thể làm toán -. Có thể nhiều hơn thường hữu ích trong trường hợp tình huống trực tuyến khác)
Tôi biết tôi đã nhìn thấy điều này trước và tôi thậm chí có thể đã thực hiện nó trước đây, nhưng tôi không thể tìm thấy mã và tôi lười biếng. Có ai có nó đặt xung quanh? Hoặc ai đó có thể đề xuất một cách tiếp cận tốt hơn?
Một năm (và một chút) sau ...
tôi thực hiện một giải pháp dựa trên câu trả lời của Adamski dưới đây, và nó làm việc, nhưng sau một tháng sử dụng tôi sẽ không khuyên bạn nên nó . Khi bạn có nhiều cập nhật, việc kích hoạt/xử lý các sự kiện tiến bộ không cần thiết sẽ trở thành một chi phí rất lớn. Cơ chế đếm cơ bản là tốt, nhưng tốt hơn hết là có ai quan tâm đến cuộc thăm dò ý kiến tiến bộ cho nó, thay vì đẩy nó vào họ.
(Nếu bạn biết tổng kích thước, bạn có thể thử chỉ bắn một sự kiện mỗi> 1% thay đổi hoặc bất cứ điều gì, nhưng nó không thực sự xứng đáng với rắc rối. Và thường, bạn không cần.)
Không tệ. Có lẽ tôi đã quên 'skip()'. :) –
@David: Để thực hiện thành công việc bỏ qua có nghĩa là giới thiệu các phôi (int) khó chịu vì vậy nếu bạn biết bạn không cần nó, tôi cũng sẽ ném một UnsupportedOperationException ở đây. – Adamski
Ngoài ra, bạn cần phải kiểm tra rằng 'super.read()' không trả về kết quả âm (kết thúc dữ liệu). – PhoneixS