InputStream不会关闭,或永远持续到

| 我正在尝试将外部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()时,它将挂起。如果我等待很长时间,它将最终关闭。似乎它仍在下载文件的其余部分。如何避免这种情况并立即关闭流?     
已邀请:
使用HTTP,通常您仍然必须读取(并丢弃)整个响应流的其余部分-您不能只是关闭。必须消耗整个流。我不确定Android的httpclient是基于公共端httpclient 3还是4-使用4可以使用HttpUriRequest#abort()提前结束。不确定3是否有这样的选择 编辑:查找它,它看起来像httpclient 3,您可以执行httpget.abort()     

要回复问题请先登录注册