Получение данных поблочное бесконечно
Как вы можете знать для отправки фрагментированного файла в заголовке 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, чего никогда не произойдет. на мой вопрос есть ли лучше подход к получению фрагментированного файла из stream channel?
1 ответов
Ok. Я мог бы получить данные, используя простой подход (как показано ниже и без использования обработчика ответов). во всяком случае, я все еще немного смущен apache ChunkedInputStream и как это может быть usefual при normall 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();