FileChannel.transferTo for large file in windows

前端 未结 3 1521
南方客
南方客 2021-01-31 23:20

Using Java NIO use can copy file faster. I found two kind of method mainly over internet to do this job.

public static void copyFile(File sourceFile, File destina         


        
3条回答
  •  星月不相逢
    2021-02-01 00:01

    Windows has a hard limit on the maximum transfer size, and if you exceed it you get a runtime exception. So you need to tune. The second version you give is superior because it doesn't assume the file was transferred completely with one transferTo() call, which agrees with the Javadoc.

    Setting the transfer size more than about 1MB is pretty pointless anyway.

    EDIT Your second version has a flaw. You should decrement size by the amount transferred each time. It should be more like:

    while (position < size) {
        long count = inChannel.transferTo(position, size, outChannel);
        if (count > 0)
        {
            position += count;
            size-= count;
        }
    }
    

提交回复
热议问题