java中最好的multipart base64编码器是什么?

时间:2011-04-14 18:37:39

标签: java multithreading file-io base64 encoder

我测试了不同的base64编码器mig64,iHarder,sun等。似乎这些需要将整个数据放在内存中进行转换。

如果我想编码大文件(流)> 1gb以多线程方式,可以使用哪种编解码器实现而不会破坏文件? commons编解码器似乎有base64outputstream包装器。任何其他解决方案?

为了说清楚,我有一个1TB文件,这个文件需要编码base64。机器内存2GB RAM,用Java做最快的方法是什么?

1 个答案:

答案 0 :(得分:1)

我不确定哪个编码器的速度更快,你必须测量每个编码器才能确定。但是,您可以通过将文件拆分为块来避免内存问题并实现并发。只需确保将它们分成6个字节的边界(因为它在Base64中均匀变为8个字节)。

我建议选择合理的块大小并使用ExecutorService管理固定数量的线程来进行处理。您可以在它们之间共享RandomAccessFile并写入相应的位置。你当然必须计算输出块偏移量(只有8乘以8并除以6)。

老实说,虽然你可能没有意识到并发性能带来的性能提升。它可能会随机访问硬盘驱动器。我首先使用单个线程将文件分块。看看它的速度有多快。您可能比您想象的更快地处理1GB文件。粗略猜测我会在现代硬件上说1分钟,甚至写入您正在阅读的同一个驱动器。