我嘗試在我的android應用程序中從服務器下載大約250mb到300mb的視頻。我的代碼適用於30mb到40mb的小視頻,但我在下載大視頻時遇到了異常情況。該異常是波紋管式給出:在Android下載視頻時得到意外的「流的意外結束」
10-28 10:11:57.222:d /錯誤....(4617):產生java.io.IOException:流 意外結束10-28 10:11: 57.227:W/System.err(4617):java.io.IOException:流的意外結束 10-28 10:11:57.232:W/System.err(4617):在libcore.net.http.FixedLengthInputStream.read (FixedLengthInputStream.java:48) 10月10日至28日:11:57.232:W/System.err的(4617):在java.io.BufferedInputStream.read(BufferedInputStream.java:304) 10月10日至28日:11:57.237 :W/System.err(4617):在java.io.InputStream.read(InputStream.java:163) 10-28 10:11:57.237:W/System.err(4617):at com.photography.khalid .PreviewVideo.DownloadFile(PreviewVideo.java:1079) 10月10日至28日:11:57.237:W/System.err的(4617):在com.photography.khalid.PreviewVideo $ DownLoadVideoFile.doInBackground(PreviewVideo.java:1121) 10月10日至28日:11:57.242:W/System.err的(4617):在com.photography.khalid.PreviewVideo $ DownLoadVideoFile.doInBackground(PreviewVideo.java:1) 10月10日至28日:11:57.242:W/System.err的(4617):在android.os。的AsyncTask $ 2.call(AsyncTask.java:264) 10月10日至28日:11:57.242:W/System.err的(4617):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:305) 10-28 10:11:57.242:W/System.err(4617):在java.util.concurrent.FutureTask.run(FutureTask.java:137) 10-28 10:11:57.247:W/System.err (4617):在android.os.AsyncTask $ $ SerialExecutor 1.run(AsyncTask.java:208) 10月10日至28日:11:57.247:W/System.err的(4617):在java.util.concurrent.ThreadPoolExecutor中。 runWorker(ThreadPoolExecutor.java:1 076) 10月10日至28日:11:57.252:W/System.err的(4617):在java.util.concurrent.ThreadPoolExecutor中$ Worker.run(ThreadPoolExecutor.java:569) 10月10日至28日:11:57.252: W/System.err的(4617):在java.lang.Thread.run(Thread.java:856)
我嘗試使用這個鏈接 link找過流堆棧解決方案,但我仍然得到上述錯誤在大尺寸的視頻。
我的代碼波紋管
public void DownloadFile(String fileURL, String fileName) {
try {
String RootDir = Environment.getExternalStorageDirectory()
+ File.separator + "Photography";
/*String RootDir = context.getCacheDir()
+ File.separator + "Photography";*/
File RootFile = new File(RootDir);
RootFile.mkdir();
// File root = Environment.getExternalStorageDirectory();
URL u = new URL(fileURL);
System.setProperty("http.keepAlive", "false");
HttpURLConnection c = (HttpURLConnection) u.openConnection();
//Open a connection to that URL.
//URLConnection c = u.openConnection();
c.setUseCaches(false);
c.setDoInput(true);
c.setRequestMethod("POST");
c.setDoOutput(true);
c.connect();
int contentByte=c.getContentLength();
FileOutputStream f = new FileOutputStream(new File(RootFile,
"temp"+fileName));
//f=openFileOutput("temp"+fileName, context.MODE_PRIVATE);
InputStream in = c.getInputStream();
BufferedInputStream inStream = new BufferedInputStream(in, 1024 * 10);
byte[] buffer = new byte[10 * 1024];
int len1 = 0;
while ((len1 = inStream.read(buffer)) != -1) {
f.write(buffer, 0, len1);
Log.d("file data", buffer.toString()+",value of progressBarStatus"+progressBarStatus);
progressBarStatus+=(len1*100.0)/(contentByte)+0.0;
progressBarHorizontal.setProgress((int)progressBarStatus);
progressBar2.setProgress((int)progressBarStatus);
if(isTaskCancelled)
{
failToDownload=1;
break;
}
}
f.flush();
f.close();
inStream.close();
} catch (Exception e) {
Log.d("Error....", e.toString());
e.printStackTrace();
failToDownload=1;
}
}
如果給出任何建議,那麼最幸福來了。謝謝
施與。與你的闕相關。 ! – 2015-04-21 11:34:08
由於視頻大小有些時間服務器連接,我們因爲像互聯網低而且我們無法下載它的任何原因而丟失,所以我們使用庫來下載他們管理所有我們需要的視頻,並使用我共享的鏈接解決了我的問題。 – bhavikkumar 2015-10-13 10:13:10