0
A
回答
0
我很抱歉很遲纔回復,我在這個任務中取得了成功。我知道這不是一個「非常努力的任務」,但這對我來說是個教訓。我爲此任務使用了以下線程代碼。
private class DownloadCombiner extends Thread {
private String remoteName;
private String localName;
private int connection;
private int chunksize;
public DownloadCombiner(String remoteName,
String localName, int connection, int chunksize) {
this.remoteName = remoteName;
this.localName = localName;
this.connection = connection;
this.chunksize = chunksize;
}
public void run() {
try {
int chunkIndex = 0;
int totalSize = 0;
/*
* File connection
*/
FileConnection file =(FileConnection)Connector.open(localName);
if (!file.exists()) {
file.create();
}
file.setWritable(true);
OutputStream out = file.openOutputStream();
/*
* HTTP Connections
*/
String currentFile = remoteName + connectionType();
//log("Full URL: " + currentFile);
HttpConnection conn;
InputStream in;
int rangeStart = 0;
int rangeEnd = 0;
while (true) {
// log("Opening Chunk: " + chunkIndex);
conn = (HttpConnection) Connector.open(currentFile,
Connector.READ_WRITE, true);
rangeStart = chunkIndex * chunksize;
rangeEnd = rangeStart + chunksize - 1;
// log("Requesting Range: " + rangeStart +
// "-" + rangeEnd);
conn.setRequestProperty("Range", "bytes=" +
rangeStart + "-" + rangeEnd);
int responseCode = conn.getResponseCode();
if (responseCode != 200 && responseCode != 206)
{
// log("Response Code = " + conn.getResponseCode());
break;
}
// log("Retreived Range: " + conn.getHeaderField("Content-Range"));
in = conn.openInputStream();
int length = -1;
byte[] readBlock = new byte[256];
int fileSize = 0;
while ((length = in.read(readBlock)) != -1) {
out.write(readBlock, 0, length);
fileSize += length;
Thread.yield(); // Try not to get cut off
}
totalSize += fileSize;
// log("Chunk Downloaded: " + fileSize + " Bytes");
chunkIndex++; // index (range) increase
in.close();
conn.close();
in = null;
conn = null;
/*
* Pause to allow connections to close and other Threads
* to run.
*/
Thread.sleep(1000);
}
// log("Full file downloaded: " + totalSize + " Bytes");
out.close();
file.close();
// log("Wrote file to local storage");
} catch (Exception e) {
System.out.println(e.toString());
}
}
private String connectionType() {
switch (connection) {
case 1:
return ";deviceside=false";
case 2:
return ";deviceside=true;interface=wifi";
default:
return ";deviceside=true";
}
}
}
相關問題
- 1. 從url下載pdf文件
- 2. BlackBerry下載文件
- 3. Python - 下載pdf文件(非.pdf)url
- 4. window.open(url)無法下載pdf文件
- 5. 從Zip文件中下載PDF文件
- 6. 從URL URL的PHP curl下載文件
- 7. Maven:從url下載文件
- 8. 從URL下載Python文件
- 9. 從url下載文件ColdFusion
- 10. 從url下載mp3文件
- 11. 如何從node.js中的url下載pdf文件?
- 12. 下載PDF文件
- 13. C#從ajax驅動的url下載pdf
- 14. 從重定向URL使用NSURLSessionDownloadTask下載PDF文件
- 15. HTML強制用戶從URL下載PDF文件
- 16. 從Google Drive下載pdf文件
- 17. 從ajax響應下載pdf文件
- 18. 從服務器下載PDF文件
- 19. 從wordpress中強制下載PDF文件
- 20. 從網上下載文件(PDF)
- 21. 從javascript下載多個PDF文件
- 22. 從href鏈接下載pdf文件
- 23. 從網址下載pdf文件名PHP
- 24. 從維基百科下載pdf文件
- 25. 從網站下載所有PDF文件
- 26. 從url最佳方法下載pdf
- 27. pdf從URL下載時損壞pdf.net/C#
- 28. Android下載並從url中顯示pdf
- 29. 從更改的URL下載Excel文件
- 30. 從給定的URL下載文件
您可以將PDF文件下載到字節數組中,然後將這些字節寫入擴展名爲.pdf的文件中。 – Rupak
thanx建議Rupak,我也在想這個。我會盡力讓你的結果很快。 –