在Java中在网络上的文件之间传输字节的最佳方法是什么

时间:2015-09-25 21:20:37

标签: java networking nio

代码是用Java 1.7编写的

我想对慢速网络上的二进制文件进行一些重大修改。为防止网络连接丢失而不是直接写入文件我写入新文件。当我完成对新文件的写入后,我删除旧文件并将新文件重命名为旧文件。

我的问题是新文件是否更好 1.与原始文件位于同一位置 2.本地计算机上

1.写入文件可能会更慢,但实际上重命名应该更快,大多数会立即。用2写入文件应该更快,但然后重命名filwe会更慢。

我觉得答案是1。

实际上,如果我打开一个Filechannel到两个文件并直接从一个通道传输到另一个通道,那么这些字节必须从网络传输到我的计算机并返回到网络,或者它们是否可以直接从网络上的一个地方复制到疗法

1 个答案:

答案 0 :(得分:0)

我在这里猜测,但文件可能是通过计算机上的某些网络文件系统(NFS,SMB)安装的。所以你可以像本地文件一样访问它们;他们只是慢了。

关于第一个问题:首先在本地编写文件,你没有获得任何东西。最后,您始终必须将文件移动到网络中的正确位置,并始终涉及“复制所有字节”操作。例如,当两个文件不在同一个硬盘/ mount上时,Java的File.rename()将失败。因此,您必须手动将字节复制到目标文件夹。一些IO框架会在必要时为您执行此操作,但它始终会发生。

至于在两个远程主机之间直接复制数据:有一些网络文件系统支持这些操作,但它是一个特殊功能。通常的罪魁祸首(NFS和SMB)没有。他们总是从源下载整个文件,然后将其上传到目标。