我正在尝试将外部 mp3 下载到内部存储中。但是,我尝试下载的文件很大,因此我尝试以 1MB 的块下载它们,以便您可以在下载其余文件的同时开始播放它们。这是我的流代码:
InputStream is = null;
OutputStream os = null;
try {
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet( url );
HttpResponse response = client.execute( get );
MyLog.d( "Connection established" );
byte[] buffer = new byte[8192];
is = new BufferedInputStream( response.getEntity().getContent(), buffer.length );
os = openFileOutput( filename, MODE_PRIVATE );
int size;
int totalSize = 0;
while (( size = is.read( buffer ) ) != -1 && totalSize < 1048576) {
os.write( buffer, 0, size );
totalSize += size;
}
MyLog.d( "Finished downloading mix - " + totalSize + " bytes" );
}
catch (ClientProtocolException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
finally {
if ( os != null ) {
try {
os.flush();
os.close();
}
catch (IOException e) {
MyLog.e( "Failed to close output stream." );
}
}
if ( is != null ) {
try {
is.close();
}
catch (IOException e) {
MyLog.e( "Failed to close input stream." );
}
}
}
它可以很好地下载文件,但是当它到达finally语句中的is.close()时,它挂起。如果我等一个really时间长了终究会关门。看起来它仍在下载文件的其余部分。如何避免这种情况并立即关闭流?
对于 HTTP,您通常仍然必须读取(并丢弃)响应流的整个其余部分 - 您不能只是关闭。必须消耗整个流。我不确定 Android 的 httpclient 是基于 commons httpclient 3 还是 4 - 使用 4,您可以使用 HttpUriRequest#abort() 提前结束。不知道3有没有这样的选项
编辑:查了一下,它看起来像 httpclient 3 ,你可以做 httpget.abort()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)