Когда вы читаете содержимое файла в буфер , вы получаете len байтов. При кодировании base64 вы получаете больше len байтов, но вы все равно только записываете len байтов в файл. Это бины, которые будут обрезаны в последней части ваших чанков чтения.
Кроме того, если ваше чтение не заполняет весь буфер, вы не должны base64 кодировать больше, чем len байт, так как в противном случае вы получите конечные 0 в заполнении последних байтов.
Объединение вышеприведенной информации означает, что вы должны кодировать base64 весь файл (прочитайте все это в байт []), если только вы не можете гарантировать, что каждый прочитанный вами блок может вписаться точно в сообщение, закодированное в base64. Если ваши файлы не очень большие, я бы рекомендовал прочитать весь файл.
Меньшая проблема заключается в том, что при чтении в вашем цикле вы, вероятно, должны проверять наличие «> -1», а не «> 0», но в его случае это не имеет значения.