Я не уверен, какой кодировщик работает быстрее, вам придется измерить каждый, чтобы определить это.Однако вы можете избежать проблемы с памятью и добиться параллелизма, разбив файл на куски.Просто убедитесь, что вы разбили их на некоторую 6-байтовую границу (поскольку она равномерно превращается в 8 байтов в Base64).
Я бы рекомендовал выбрать разумный размер чанка и использовать ExecutorService
управлять фиксированным количеством потоков для выполнения обработки.Вы можете поделиться RandomAccessFile
между ними и написать в соответствующие места.Вам, конечно, придется рассчитывать смещения выходного блока (просто умножить на 8 и разделить на 6).
Честно говоря, при параллельности вы не сможете добиться значительного прироста производительности.Это может просто переполнить жесткий диск с произвольным доступом.Я бы начал с разбивки файла на один поток.Посмотрите, как быстро это в первую очередь.Вы, вероятно, можете сжать файл на 1 ГБ быстрее, чем вы думаете.В качестве приблизительного предположения я бы сказал, что на современном оборудовании 1 минута, даже запись на тот же диск, с которого вы читаете.