Какой лучший кодер Multi-Base Base 64 в Java? - PullRequest
0 голосов
/ 14 апреля 2011

Я тестировал различные кодировщики base64 mig64, iHarder, sun и т. Д. Похоже, что для конвертации необходимо, чтобы все данные были в памяти.

Если я хочу кодировать большой файл (поток)> 1 ГБ многопоточным способом, какую реализацию кодека можно использовать без повреждения файла? Кажется, у кодека commons есть обертка base64outputstream. какие-либо другие решения?

Чтобы было понятно, у меня есть файл размером 1 ТБ, и этот файл должен быть закодирован в base64. Машинная память 2 ГБ ОЗУ, какой самый быстрый способ сделать это на Java?

1 Ответ

1 голос
/ 14 апреля 2011

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

Я бы рекомендовал выбрать разумный размер чанка и использовать ExecutorService управлять фиксированным количеством потоков для выполнения обработки.Вы можете поделиться RandomAccessFile между ними и написать в соответствующие места.Вам, конечно, придется рассчитывать смещения выходного блока (просто умножить на 8 и разделить на 6).

Честно говоря, при параллельности вы не сможете добиться значительного прироста производительности.Это может просто переполнить жесткий диск с произвольным доступом.Я бы начал с разбивки файла на один поток.Посмотрите, как быстро это в первую очередь.Вы, вероятно, можете сжать файл на 1 ГБ быстрее, чем вы думаете.В качестве приблизительного предположения я бы сказал, что на современном оборудовании 1 минута, даже запись на тот же диск, с которого вы читаете.

...