Я пытаюсь загрузить внешний mp3 во внутреннюю память. Тем не менее, файлы, которые я пытаюсь загрузить, большие, поэтому я пытаюсь загрузить их по 1 МБ, чтобы вы могли начать их воспроизведение, пока загружаются остальные. Вот мой код потока:
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." );
}
}
}
Он прекрасно загружает файл, но когда он достигает is.close () в операторе finally, он зависает. Если я подожду действительно долгое время, оно в конце концов закроется. Кажется, что он все еще загружает остальную часть файла. Как мне избежать этого и немедленно закрыть поток?