Android HttpURLConnection,非阻塞读取

Android HttpURLConnection,非阻塞读取,android,httpurlconnection,nonblocking,Android,Httpurlconnection,Nonblocking,我正在使用HttpURLConnection实现非阻塞下载,下面是我的测试代码。 根据使用BufferdReader的文档,ready()可以告诉我何时调用read(),而不会阻塞 但是,我还发现,当读取所有数据时,BufferdReader.ready()返回false。因此,我无法从ready()调用中区分“文件结束”和“未准备就绪” 我可以考虑从响应中解析“content length”头来猜测文件长度,但我们知道,内容长度是不可靠的 有谁能告诉我解决这个问题的办法吗? 简言之,如果我们不

我正在使用HttpURLConnection实现非阻塞下载,下面是我的测试代码。 根据使用BufferdReader的文档,ready()可以告诉我何时调用read(),而不会阻塞

但是,我还发现,当读取所有数据时,BufferdReader.ready()返回false。因此,我无法从ready()调用中区分“文件结束”和“未准备就绪”

我可以考虑从响应中解析“content length”头来猜测文件长度,但我们知道,内容长度是不可靠的

有谁能告诉我解决这个问题的办法吗? 简言之,如果我们不调用read(),我怎么知道我们是否点击了“文件结尾”


我真的不想听起来像在夸夸其谈,但您正在后台线程上处理
HttpURLConnection
;你为什么担心阻止读取?如果在读取过程中必须取消,可以中断线程…嗨,克里斯,谢谢你的输入。我基本上是使用JNI包装器在C代码中实现整个过程。(线程中断不存在的地方)我可能需要有一个新的java类,其中包含与JNI代码对话的线程实现。(这样我就可以从Java的线程中断中获益)。谢谢@krislarson(Http/s)URLConnection使用阻塞的、不可中断的IO。这意味着它忽略线程中断。connection.connect()、connection.getInputStream()和inputStream.read()都不会对线程中断做出反应。
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");

BufferedReader in = new BufferedReader(
        new InputStreamReader(con.getInputStream()));

char data[] = new char[100 * 1024];
int readLen = 0;
int offset = 0;
while(m_abort != true)
{
    if (in.ready())
    {
       readLen = in.read(data, offset, 256);
       if (readLen == -1)
         break;

       offset += readLen;
    }
}