Vì vậy, tôi có một số mã đọc một số byte nhất định từ một tệp và trả về mảng byte kết quả (điều này về cơ bản được sử dụng để chunking các tệp để gửi qua mạng dưới dạng văn bản ascii được mã hóa base64 (cuối cùng).Java: Làm thế nào để "cắt" một mảng byte?
Nó hoạt động tốt, ngoại trừ khi đoạn cuối cùng của tệp được tạo, nó không phải là một đoạn đầy đủ. Do đó, mảng byte kết quả không đầy. Tuy nhiên, nó là một kích thước không đổi, có nghĩa là các tập tin được tập hợp lại có một bó toàn bộ dữ liệu bổ sung (có thể là 0) nối vào cuối.
Tôi làm cách nào để byte [] cho đoạn cuối cùng của tệp thực sự chỉ chứa dữ liệu cần thiết? Mã này trông như thế này:
private byte[] readData(File f, int startByte, int chunkSize) throws Exception {
RandomAccessFile raf = new RandomAccessFile(f, "r");
raf.seek(startByte);
byte[] data = new byte[chunkSize];
raf.read(data);
raf.close();
return data;
}
Vì vậy, nếu chunkSize lớn hơn các byte còn lại trong tập tin, một kích thước byte đầy đủ [] được quay trở lại nhưng chỉ có nó đầy một nửa với dữ liệu.
Sử dụng Arrays.copyOf từ bài viết ở trên thay vì System.arraycopy (mà đã ném một ngoại lệ), điều này đã làm việc hoàn hảo! Cảm ơn! –
Đã sửa, tôi có lỗi đánh máy trong so sánh, nên đã sử dụng '==' không '='. – notnoop
@Erin Drummond: Ngoại lệ được ném bởi 'System.arraycopy()' là gì? – Asaph