Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中最好的多部件Base64编码器是什么?_Java_Multithreading_File Io_Base64_Encoder - Fatal编程技术网

java中最好的多部件Base64编码器是什么?

java中最好的多部件Base64编码器是什么?,java,multithreading,file-io,base64,encoder,Java,Multithreading,File Io,Base64,Encoder,我已经测试了不同的base64编码器mig64、iHarder、sun等。似乎这些都需要将整个数据存储在内存中进行转换 如果我想以多线程方式对大于1gb的大文件(流)进行编码,可以使用哪种编解码器实现而不会损坏文件?commons编解码器似乎有base64outputstream包装器。还有其他解决办法吗 为了清楚起见,我有一个1TB的文件,这个文件需要编码为base64。机器内存2GB RAM,在Java中最快的方法是什么 我不确定哪种编码器的速度更快,您需要测量每种编码器来确定这一点。但是,

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

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


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

我不确定哪种编码器的速度更快,您需要测量每种编码器来确定这一点。但是,您可以通过将文件分割成块来避免内存问题并实现并发性。只需确保在6字节的边界上拆分它们(因为它在Base64中平均转换为8字节)

我建议选择一个合理的块大小,并使用一个函数来管理固定数量的线程来进行处理。您可以在他们之间共享一份电子邮件,并将其发送到适当的位置。当然,您必须计算输出块偏移量(只需乘以8除以6)


老实说,虽然您可能没有意识到并发在这里有多大的性能提升。它可能会通过随机访问来淹没硬盘。我首先用一个线程将文件分块。看看这有多快。您处理1GB文件的速度可能比您想象的要快。粗略地说,在现代硬件上,我会说1分钟,甚至是在你读的同一个驱动器上写东西。

那么你对“最佳”的定义是“能够对流进行编码”?你还有其他标准吗?正如目前所写,这个问题是主观的(来自标题)和/或一个“X列表”请求(基于最后一部分)。。。。我的意思是,如果我必须对一个更大的文件进行编码,标准将是大小与性能,即n Gbs/hourIf如果你愿意测试更多的实现,你能比较一下我刚刚提出的实现吗?如何确保完整性,比如说在76个字符之后换行,等等?我不会在换行时拆分它,你需要在固定的字节边界上拆分。如果你逐行阅读,那么你不能保证每行都是6字节的倍数。我的意思是写。。。根据规范,对于较大的块,输出应该在76之后有换行符。ie文件被转换成另一个有字符的文件,根据规范,76个字符后会有换行符啊,我明白了。您需要一个能产生完整76个字符行的块大小。然后可以计算目标偏移量。例如,3648个输入字符将在Base64中生成4864个输出字符。这是64行输出。假设在每一行的末尾有2个字节用于CRLF,这又增加了128个字节的输出。因此,对于每个3648字节的输入块,您将得到一个4992字节的输出块。只需在文件中为正在处理的块写入正确的偏移量。