0

我正在用 java 制作一个下载实用程序,它将从 ftp 服务器下载文件。我正在使用 URLConnection 类来建立连接和 inputstream 作为流对象。我面临的问题是网络故障情况,即在下载特定文件时,如果连接丢失并且连接恢复后,我希望它从之前停止的位置恢复下载。

为了实现这一点,我做了以下工作:-

/*在这里,我试图跳过到目前为止下载的字节数,以便从应该恢复下载的流中获取指针。skip() 方法可能不一定会跳过作为参数给出的字节数,因此while 循环。*/

while(totalByteSkipped!=downloaded) 
{ 
      bytesSkipped = stream.skip(downloaded-totalByteSkipped); 

      totalByteSkipped = totalByteSkipped+bytesSkipped; 
} 

但是这种手动跳过这么多字节的方法非常慢并且会影响下载的整体时间,因此在这种情况下,我需要一种机制来获取流中停止下载的指针。

希望在相同的情况下获得另一种方法。谢谢!!

4

2 回答 2

0

skip() 对您不起作用,因为它只是下载所有数据然后丢弃它。服务器不会被告知这些位被丢弃,它们在客户端被丢弃。

你看错了结局。检查 FTP 协议(​​或您使用的任何协议)是否允许此行为以及您必须发送哪些指令才能使用它。否则,即使您不想要,他们也会从一开始就继续向您发送所有数据。

于 2011-08-08T10:33:11.387 回答
0

您需要执行FPT 重启才能恢复下载。如果您的服务器支持它,那么您可以告诉它文件中的偏移量。

您是否有任何理由不使用已经存在的 FTP 客户端?Commons Net FTP Client支持重启。

于 2011-08-08T10:58:17.943 回答