答技术分享达人
在使用 Java Commons Net FTP 进行断点下载时,使用 FTPClient 的 setRestartOffset(long offset) 方法设置续传位置时,确实存在一个长度超过2G时续传开始位置不对的问题,原因是方法中的参数类型为 long,而 FTPClient 内部处理时使用了 int 类型,导致了精度丢失和计算错误。
解决这个问题,可以使用一个特殊的值进行偏移计算,具体方法如下:
将要续传的文件分成多个部分,每个部分的大小都小于等于 2G,并记录每个部分的位置和长度。
在进行续传时,先对当前要续传的部分起始位置 offset 进行计算,计算公式为:offset = preOffset + (partStart + partOffset),其中 preOffset 是上一个部分的结束位置,partStart 是当前部分的起始位置,partOffset 是当前续传部分的偏移量。需要注意,partStart 和 partOffset 都是小于等于 2G 的值。
然后调用 FTPClient 的 setRestartOffset(long offset) 方法,传入计算后得到的 offset 值,进行断点下载的续传操作。
这样,在进行续传长度超过 2G 的文件时,就可以避免续传开始位置不对的问题。