当文件在网络上时,java FileChannel.transferTo()是否能很好地工作?

当文件在网络上时,java FileChannel.transferTo()是否能很好地工作?,java,nio,Java,Nio,说 字节可以从文件传输到其他通道,反之亦然 反之亦然,可以通过多种操作系统将其优化为 直接向文件系统缓存或从文件系统缓存进行非常快速的传输 如果这两个文件都在本地计算机上,我可以理解这是如何工作的 但是,如果文件位于同一网络驱动器上,是否适用相同的设置 我的意思是,文件2中的字节必须先传输到本地计算机才能写入第二个文件,在缓慢的网络连接上,这似乎超过了绕过Java堆的任何优势。或者操作系统可以说“将x字节从文件1传输到文件2,因为它们位于同一驱动器上,所以实际字节不必通过网络传输,只需执行传输指

字节可以从文件传输到其他通道,反之亦然 反之亦然,可以通过多种操作系统将其优化为 直接向文件系统缓存或从文件系统缓存进行非常快速的传输

如果这两个文件都在本地计算机上,我可以理解这是如何工作的

但是,如果文件位于同一网络驱动器上,是否适用相同的设置


我的意思是,文件2中的字节必须先传输到本地计算机才能写入第二个文件,在缓慢的网络连接上,这似乎超过了绕过Java堆的任何优势。或者操作系统可以说“将x字节从文件1传输到文件2,因为它们位于同一驱动器上,所以实际字节不必通过网络传输,只需执行传输指令”

如果存在这种机制,如文档所述,则由操作系统决定;反过来,这意味着特定JRE的实现必须使用适当的操作系统原语(例如Linux下的
sendfile()
)。但操作系统()有可能做到这一点,但我不知道这是否可行?不清楚您在这里真正想问什么。字节必须传输到本地计算机中的操作系统,然后通过网络从那里传输到目标计算机中的操作系统,再从那里传输到目标文件。没有别的办法了。但是,如果文件位于同一网络驱动器上,则您在错误的计算机上执行代码。在它们都是本地文件的计算机上执行。@EJP它们位于同一网络驱动器上,但应用程序将始终安装在连接到NAS驱动器的PC上,而不是NAS服务器本身上,因此我无法在正确的计算机上执行代码(: