Sao chép tập tin Java (thay đổi kích thước bộ đệm)
Trong Java java.io.InputStream、java.io.OutputStream Tại
Phần này giới thiệu một chương trình mẫu thực hiện các thao tác sao chép bằng cách sử dụng luồng đầu vào/đầu ra.
Trong sao chép dựa trên luồng dữ liệu, việc tăng kích thước bộ đệm đọc cho phép sao chép tương đối nhanh ngay cả với các tệp lớn.
Chương trình mẫu cho phép bạn chỉ định kích thước bộ đệm đọc dữ liệu dưới dạng tham số.
Vùng đệm đọc được chỉ định được phân bổ trong vùng nhớ heap của máy ảo Java, vì vậy nếu kích thước quá lớn sẽ làm giảm hiệu suất. Do đó, khi sao chép tập tin, chúng ta cũng kiểm tra kích thước vùng đệm đọc dữ liệu tối ưu để đảm bảo hiệu quả.
Chương trình mẫu
/**
Dữ liệu được ghi từ luồng đầu vào sang luồng đầu ra.
* Sau khi quá trình sao chép hoàn tất, các luồng đầu vào và đầu ra sẽ được đóng lại.
* @param trong luồng đầu vào
* @param os Luồng đầu ra
* @param bufferSize Kích thước của bộ đệm (KB) để đọc dữ liệu.
* @throws IOException Nếu xảy ra bất kỳ ngoại lệ nào liên quan đến nhập/xuất dữ liệu
*/
public static void copyStream(InputStream in, OutputStream os,
int bufferSize) throws IOException {
int len = -1;
byte[] b = new byte[bufferSize * 1024];
thử {
while ((len = in.read(b, 0, b.length)) != -1) {
os.write(b, 0, len);
}
os.flush();
} Cuối cùng {
nếu (in != null) {
thử {
ghim theo();
} catch (IOException e) {
e.printStackTrace();
}
}
nếu (os != null) {
thử {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
thực thi
Để sao chép các tệp chương trình mẫu, tôi đã chuẩn bị một tệp có dung lượng 100MB mang tên "100M.txt" trực tiếp trong ổ C. Trong chương trình mẫu, C:\100M.txt Dữ liệu được đọc theo từng bộ đệm có kích thước 1000KB. C:\a.txt Sao chép nó vào [vị trí].
Mẫu được chạy trong môi trường sau đây.
Hệ điều hành: Windows XP
CPU: Athlon 1.46GHz
Bộ nhớ: 1GB
JRE: 1.6.4
◆Ví dụ
/** * Ví dụ thực thi * @param args */ public static void main(String[] args) { try { copyStream("C:\\100M.txt", "C:\\a.txt",1000); } catch (IOException e) { e.printStackTrace(); } }
Thay đổi kích thước bộ đệm
Để xác định kích thước bộ đệm đọc dữ liệu hiệu quả khi sao chép tệp, đối số thứ ba của copyStream nên được đặt thành
Kết quả của việc thực hiện quy trình sao chép tương tự với các đơn vị 1KB, 100KB, 1000KB và 10000KB được tóm tắt dưới đây.

Mặc dù chúng ta không thể đưa ra kết luận chắc chắn chỉ dựa trên các kết quả trên, nếu kích thước bộ đệm đọc dữ liệu được chỉ định theo đơn vị 1000KB,
Kết quả cho thấy hệ thống hoạt động hiệu quả về mức sử dụng bộ nhớ heap và thời gian xử lý trong quá trình sao chép.
Hơn nữa, kết quả tương tự cũng thu được ngay cả khi kích thước tệp được tăng lên (khoảng 1GB).
Ngược lại, khi sao chép các tệp nhỏ (khoảng 1MB trở xuống), việc tăng kích thước bộ đệm là không cần thiết, vì vậy tốt nhất nên chỉ định khoảng 100KB.
Sử dụng FileChannel để có tốc độ nhanh hơn.
java.io.InputStream、java.io.OutputStream
Việc sao chép rất quan trọng để hiểu các luồng đầu vào/đầu ra, nhưng
Tính năng I/O mới được giới thiệu trong J2SE1.4 java.nio.channels.FileChannel#transferTo
Bằng phương pháp này, bạn có thể sao chép tập tin hiệu quả hơn nữa.
Tiếp theo, tôi sẽ hướng dẫn bạn cách sao chép tập tin một cách dễ dàng và nhanh chóng bằng FileChannel.
⇒ Sao chép tập tin Java (dễ dàng và nhanh chóng)

