您可能知道要在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。我的问题是,有没有更好的方法从流 channel 接收分块文件?

最佳答案

好的。我可以使用简单的方法来接收数据(如下所示,而无需使用响应处理程序)。无论如何,我仍然对apache ChunkedInputStream以及在正常的inputstream可以处理分块的数据时如何使用它感到困惑。

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/

10-09 13:00