android - 无休止地接收分块数据

标签 android http chunked-encoding chunked

正如您可能知道的,在 HTTP header 中发送分块文件时,没有内容长度,因此程序必须等待 0 才能理解文件结束。

--sample http header  
POST /some/path HTTP/1.1
Host: www.example.com  
Content-Type: text/plain  
Transfer-Encoding: chunked  
25  
This is the data in the first chunk  
8
sequence  
0

要接收此文件,可以使用以下代码。

ResponseHandler<String> reshandler = new ResponseHandler<String>() {
    public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException {

        HttpEntity entity = response.getEntity();

        InputStream in =  entity.getContent();
        byte[] b = new byte[500];
        StringBuffer out = new StringBuffer();
        int len = in.read(b);
        out.append(new String(b, 0 , len));

        return out.toString();
    }
}; 

但就我而言,我使用流媒体 channel ,换句话说,没有 0 表示该文件已结束。无论如何,如果我使用这段代码,它似乎永远等待 0,而 0 永远不会发生。我的问题是有没有更好的方法从流 channel 接收分块文件?

最佳答案

好的。我可以使用简单的方法接收数据(如下所示且不使用 Response Handler)。不管怎样,我还是对apache ChunkedInputStream有点困惑以及当普通输入流可以处理分块数据时它是如何有用的。

is =  entity.getContent();
StringBuffer out = new StringBuffer();
byte[] b = new byte[800];
int len = is.read(b);
out.append(new String(b, 0 , len));
result = out.toString();

关于android - 无休止地接收分块数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7076725/

相关文章:

android - 错误 :(3) Error retrieving parent for item without SDK version 23

java - Try/catch block 带有 while 语句,用于处理套接字数据,不会继续。没有明显的错误(我认为)

使用 clojure 在 Heroku 上进行 HTTP 流式处理/分块响应

安卓私有(private)发布

java - 如何创建像 android 通知这样的内裤

android - action.PROCESS_TEXT Activity 未在 Oreo 的 EditText 中列出

http - 关于Access-Control-Allow-Origin和CORS的问题

c++ - 用于构建 Web 协议(protocol)的资源

http-headers - 是否有浏览器支持以分块编码响应发送的预告片?

java - AppEngine BlobStore 是否支持上传的分块传输编码(状态 411 : Length required)?