2
這可能是一個經常被問到的問題,但我找不到正確的答案。通過HTTPConnection下載大文件 - JAVA Applet
嗯,我有以下代碼:
java.net.URL url = new java.net.URL(built);
java.net.HttpURLConnection con = (HttpURLConnection)url.openConnection();
if (con.getResponseCode() != 200) {
// error handle here!;
continue;
}
// begin to download the file
int file_size = con.getContentLength();
FileOutputStream stream = new FileOutputStream(m_WorkingDir + "/" + getFilenameWithPath(i));
InputStream remoteStream = con.getInputStream();
int chunks = (int) Math.ceil((float)file_size/(float)CHUNK_SIZE);
// download each chunk
byte[] temp = new byte[CHUNK_SIZE];
for(int a = 0; a < chunks; a++) {
// calculate chunk size
int chunk_size = CHUNK_SIZE;
if(a == chunks-1) {
// last chunk
chunk_size = file_size - a * CHUNK_SIZE;
System.out.println("Download last chunk : " + chunk_size);
}
// download chunk
int bytes = remoteStream.read(temp, 0, chunk_size);
stream.write(temp, 0 ,chunk_size); // save to local filesystem
}
stream.close();
remoteStream.close();
con.disconnect();
此代碼「應該」簡單地下載文件分塊..但問題是,它並沒有正確地做到這一點。我對代碼進行了調試,結果發現它正確地讀取了大約10個塊,但是它的讀取類似於chunk_size的一半,即使它不是最後一個塊,然後它返回-1直到for(int a ...)已完成。
對我來說,這似乎是InputStream的認爲這是EOF,即使它是不是!是的,我測試了通常的瀏覽器的HTTP連接,它工作正常。
測試它與CHUNK_SIZE多個設置的代碼,但它總是有相同的結果。
文件我想下載大約10兆字節〜..