如何使用FTP协议恢复读取输入流



我正在学习java oop。我的程序通过FTP下载文件。我想在再次启动时恢复下载。这是我的代码:

URL urlName = new URL(url);
URLConnection con = urlName.openConnection();
BufferedInputStream in = new BufferedInputStream(con.getInputStream());
int i = 0;
long downloadedSizeKB;
System.out.println("before skip");
long k = in.skip(counter);
System.out.println(k);
byte[] bytesIn = new byte[1024];
while ((i = in.read(bytesIn)) >= 0) {
    if(counter >= alreadyDownloadedBytes) {
        out.write(bytesIn, 0, i);
        downloadedSizeKB = counter/1024;
        downSize.setText(downloadedSizeKB + " KB downloaded...");
        while(isPaused) {
            downSize.setText(downloadedSizeKB + " KB PAUSED");
            Thread.sleep(1000);                     
        }
    }
    counter += i;
}
in.close();

首先,我尝试阅读它与先前下载的文件的Lenght一样多,然后从那时恢复阅读和写作。在恢复下载之前读取文件需要太多时间(100MB大约1-2分钟)。之后,我意识到有一种跳过方法,但我想它可以做同样的事情,因为它几乎需要相同的时间。

是否有更快地开始从特定字节读取文件的方法?还是我应该以另一种方式这样做?否则这是唯一的方法?

您可以使用apache.commons.net.ftp.ftpclient(在Commons-net.jar库中)。

您的方法为:setRestRestOffSet(youroffset),在检索文件之前,请使用该方法,文件数据将从指定的偏移开始。

我尚未查看FTP的全部详细信息,但是,是的,跳过输入流只会读取已经读取的字节。您需要做的是告诉服务器仅发送您还没有的字节。

在HTTP和FTP中,这是范围标头。这个问题有有关FTP的方法的详细信息。

最新更新