Бесконечно получать фрагментированные данные - PullRequest
6 голосов
/ 16 августа 2011

Как вы, возможно, знаете, для отправки фрагментированного файла в заголовке HTTP длина контента отсутствует, поэтому программа должна ждать 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();
    }
}; 

но в моем случае я работаю с потоковым каналом, другими словами, нет 0, который показывает, что файл завершен. в любом случае, если я использую этот код, кажется, что он ждет вечно, ожидая 0, чего никогда не произойдет. мой вопрос есть ли лучший подход для получения chunked файла из потокового канала?

1 Ответ

1 голос
/ 22 августа 2011

Хорошо.Я мог бы получить данные, используя простой подход (как следующий и без использования обработчика ответов).в любом случае, я все еще немного сбит с толку насчет apache ChunkedInputStream и того, как он может быть полезен, в то время как normall inputtream может обрабатывать фрагментированные данные.

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();
...