我正在java中创建一个下载实用程序,它将从ftp服务器下载文件。 我使用URLConnection类来建立连接和输入流作为流对象。 我面临的问题是网络故障情况,即 如果连接丢失,在下载特定文件时,连接恢复后,我希望它从先前停止的位置继续下载。
为了达到这个目的,我完成了以下操作: -
/ *这里,我试图跳过目前为止下载的字节数,以便从应该恢复下载的位置获取流中的指针.skip()方法可能不一定会跳过给定的字节数参数,因此是while循环。 * /
while(totalByteSkipped!=downloaded)
{
bytesSkipped = stream.skip(downloaded-totalByteSkipped);
totalByteSkipped = totalByteSkipped+bytesSkipped;
}
但是这种手动跳过这么多字节的方法非常慢并影响下载的总时间,因此在这种情况下我需要一种机制来在流停止下载时获取流中的指针。
希望能够采用另一种方法。 谢谢!
答案 0 :(得分:0)
skip()不适合你,因为它只是下载所有数据然后丢弃它。服务器不会被告知这些位被丢弃,它们将被丢弃在客户端。
你正在寻找错误的结局。检查FTP协议(或您使用的任何协议)是否允许此行为以及您必须发送哪些指令才能使用它。否则,即使您不想要它们,它们也会一直向您发送所有数据。
答案 1 :(得分:0)
您需要实施FPT restart才能恢复下载。如果您的服务器支持它,那么您可以告诉它文件中的偏移量。
您是否有任何理由不使用已存在的FTP客户端? Commons Net FTP Client支持重启。