我正在學習Java OOP。我的程序通過FTP下載文件。我想在重新啓動時重新開始下載。這裏是我的代碼:如何使用FTP協議恢復讀取InputStream
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分鐘)。之後,我意識到有一個跳過方法,但我想它做同樣的事情,因爲它需要幾乎相同的時間。
有沒有更快的方式開始從它的特定字節讀取文件?或者我應該以另一種方式來做這件事?或者這是唯一的方法?
看看http://stackoverflow.com/questions/2792963/how-to-resume-an-ftp-download-at-any-point-shell-script-wget-option –