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