代码是用Java 1.7编写的
我想对慢速网络上的二进制文件进行一些重大修改。为防止网络连接丢失而不是直接写入文件我写入新文件。当我完成对新文件的写入后,我删除旧文件并将新文件重命名为旧文件。
我的问题是新文件是否更好 1.与原始文件位于同一位置 2.本地计算机上
1.写入文件可能会更慢,但实际上重命名应该更快,大多数会立即。用2写入文件应该更快,但然后重命名filwe会更慢。
我觉得答案是1。
实际上,如果我打开一个Filechannel到两个文件并直接从一个通道传输到另一个通道,那么这些字节必须从网络传输到我的计算机并返回到网络,或者它们是否可以直接从网络上的一个地方复制到疗法
答案 0 :(得分:0)
我在这里猜测,但文件可能是通过计算机上的某些网络文件系统(NFS,SMB)安装的。所以你可以像本地文件一样访问它们;他们只是慢了。
关于第一个问题:首先在本地编写文件,你没有获得任何东西。最后,您始终必须将文件移动到网络中的正确位置,并始终涉及“复制所有字节”操作。例如,当两个文件不在同一个硬盘/ mount上时,Java的File.rename()
将失败。因此,您必须手动将字节复制到目标文件夹。一些IO框架会在必要时为您执行此操作,但它始终会发生。
至于在两个远程主机之间直接复制数据:有一些网络文件系统支持这些操作,但它是一个特殊功能。通常的罪魁祸首(NFS和SMB)没有。他们总是从源下载整个文件,然后将其上传到目标。