0

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

如果我想以多线程方式对大于 1gb 的大文件(流)进行编码,可以使用哪种编解码器实现而不损坏文件?commons 编解码器似乎具有 base64outputstream 包装器。还有其他解决方案吗?

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

4

1 回答 1

1

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

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

老实说,虽然您可能没有意识到并发在这里有太多的性能提升。它可能会通过随机访问压倒硬盘驱动器。我将从使用单个线程将文件分块开始。先看看有多快。您处理 1GB 文件的速度可能比您想象的要快。作为一个粗略的猜测,我会在现代硬件上说 1 分钟,甚至写入你正在读取的同一个驱动器。

于 2011-04-14T18:48:55.223 回答