私はJavaOOPを学んでいます。私のプログラムは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();
最初は、以前にダウンロードしたファイルの長さと同じくらいそれを読み取ってみて、それからその時点から読み取りと書き込みを再開しました。ダウンロードを再開する前にファイルを読み取るのに時間がかかりすぎます(100MBの場合は1〜2分)。その後、スキップ方法があることに気づきましたが、ほぼ同じ時間がかかるので、同じことをしていると思います。
ファイルの特定のバイトからファイルの読み取りを開始するより速い方法はありますか?それとも私はこれを別の方法で行う必要がありますか?それともこれが唯一の方法ですか?