Итак, у меня есть код, который считывает определенное количество байтов из файла и возвращает результирующий массив байтов (это в основном используется для разбивки файлов на части для отправки по сети в виде (в конечном итоге) текста ascii в кодировке base64).
Он работает нормально, за исключением того, что когда генерируется последний фрагмент файла, он не является полным фрагментом. Таким образом, результирующий массив байтов не заполнен. Тем не менее, это постоянный размер, а это означает, что файл повторно собран, и к концу добавляется целая куча дополнительных данных (возможно, 0).
Как я могу сделать так, чтобы byte[] для последнего фрагмента файла действительно содержал только те данные, которые ему нужны? Код выглядит следующим образом:
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;
}
Таким образом, если chunkSize больше, чем оставшиеся байты в файле, возвращается полноразмерный byte[], но он заполнен только наполовину данными.