Windows对最大传输大小有硬性限制,如果超过该限制,则会出现运行时异常。因此,您需要调整。您提供的第二个版本更好,因为它不假定一次
transferTo()调用就完全传输了文件,这与Javadoc一致。
无论如何,将传输大小设置为大约1MB以上是毫无意义的。
编辑 您的第二个版本有缺陷。您应该减少
size每次转帐的金额。应该更像是:
while (position < size) { long count = inChannel.transferTo(position, size, outChannel); if (count > 0) { position += count; size-= count; }}


