[英]My Java code downloads a file, but it's the wrong size
以下代碼創建了一個文件,但是它無法打開,並且它創建的文件大小與我要下載的文件的大小沒有遠程對應。 (以whatsapp更新程序鏈接為例):
private static boolean download(){
try {
String outfile = "/sdcard/whatsapp.apk";
URL download = new URL("https://www.whatsapp.com/android/current/WhatsApp.apk");
ReadableByteChannel rbc = Channels.newChannel(download.openStream());
FileOutputStream fileOut = new FileOutputStream(outfile);
fileOut.getChannel().transferFrom(rbc, 0, 1 << 24);
fileOut.close();
rbc.close();
return true;
} catch (IOException ioe){
return false;
}
}
編輯:這是我完整代碼的簡化版本,(完整代碼允許主線程執行網絡操作,並信任所有證書),也更改了問題中的代碼。
測試表明沒有拋出IOException,並且代碼完整無誤。 那么,為什么下載的文件不可用?
從Javadoc :
如果源通道的剩余剩余字節數少於計數字節,或者源通道是非阻塞的且輸入緩沖區中立即可用的計數字節數少於字節,則將傳輸少於請求的字節數。
這意味着不能保證這將一次保存整個文件。 您應該將此調用置於一個循環中,一旦完成整個下載,該循環就會中斷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.