Tôi đã định dạng mã của tôi đang tải tệp nhị phân. Thời gian tải là khoảng 15 giây.Tìm ra kích thước tối ưu cho BufferedInputStream trong Java
Phần lớn thời gian tải của tôi đến từ các phương pháp đang tải dữ liệu nhị phân.
Tôi có đoạn code sau để tạo DataInputStream tôi:
is = new DataInputStream(
new GZIPInputStream(
new FileInputStream("file.bin")));
Và tôi đã thay đổi nó như thế này:
is = new DataInputStream(
new BufferedInputStream(
new GZIPInputStream(
new FileInputStream("file.bin"))));
Vì vậy, sau khi tôi đã làm thay đổi nhỏ này mã tải đi từ 15 giây đến 4.
Nhưng sau đó tôi thấy rằng BufferedInputStream có hai hàm tạo. Phương thức khởi tạo khác cho phép bạn xác định rõ kích thước bộ đệm.
Tôi đã có hai câu hỏi:
- Điều gì kích thước được chọn trong BufferedInputStream và là lý tưởng? Nếu không, làm thế nào tôi có thể tìm thấy kích thước tối ưu cho bộ đệm? Tôi có nên viết một đoạn mã nhanh để thực hiện tìm kiếm nhị phân không?
- Đây có phải là cách tốt nhất để tôi có thể sử dụng BufferedInputStream không? Ban đầu tôi có nó trong GZIPInputStream nhưng có lợi ích không thể bỏ qua. Tôi giả sử mã đang làm gì bây giờ là mỗi khi bộ đệm tệp cần được lấp đầy, luồng đầu vào GZIP đi qua và giải mã x byte (trong đó x là kích thước của bộ đệm). Nó có đáng để bỏ qua GZIPInputStream hoàn toàn không? Đó là chắc chắn không cần thiết, nhưng kích thước tập tin của tôi là giảm đáng kể khi sử dụng nó.
Tôi đề nghị bạn thử một bộ đệm 64K cho GZIPInputStream khi đọc từ đĩa. Tôi sử dụng 1 MB, có khả năng nhiều hơn mức cần thiết. ;) –