在Java中合并二进制文件的最佳方法

耕种机

我正在开发一个基本的下载管理器,该管理器可以使用多个连接通过http下载文件。下载结束时,我有几个临时文件,每个文件都包含一部分。

我现在想将它们合并到一个文件中。

这样做并不难,只需创建一个输出流和输入流,然后将输入以良好的顺序传送到输出中即可。

但是我想知道:是否有一种方法可以更有效地做到这一点?我的意思是,根据我的理解,这里将发生的事情是JVM将按字节读取输入字节,并按字节写入输出字节。

所以基本上我有:-从磁盘读取字节-在内存中存储字节-一些CPU指令可能会运行,并且该字节可能会复制到CPU的缓存中-将字节写入磁盘

我想知道是否有一种方法可以将进程保留在磁盘上?我不知道我是否可以理解,但是基本上是要告诉磁盘“嘿,磁盘,拿走你的这些文件,然后用它们制作一个”

简而言之,我想将CPU和内存使用率降低到最低。

乔尼

从理论上讲,可以在文件系统级别执行此操作:您可以将阻止列表从一个inode追加到另一个inode,而无需移动数据。但是,这不是很实用,很可能您必须绕过操作系统并直接访问磁盘。

接下来最好的事情可能是使用FileChannel.transferTotransferFrom方法:

该方法可能比从该通道读取并写入目标通道的简单循环效率更高。许多操作系统可以直接将字节从文件系统高速缓存传输到目标通道,而无需实际复制它们。

您还应该使用流或RandomAccessFile-测试它可能比使用通道更快来测试读写大块字节这是一篇有关在Java中测试顺序IO性能的好文章

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章