考虑以下示例:
import java.io.InputStream;
import kong.unirest.GetRequest;
import kong.unirest.HttpResponse;
class Download {
private long byteCounter;
private long contentLength;
InputStream download(GetRequest request) {
// no appropriate method here? --v
HttpResponse response = request.???
// get length to display some progress bar later ...
// (not shown here)
long contentLength = contentLengthHeader != null
? Long.valueOf(contentLengthHeader)
: Long.valueOf(0);
InputStream responseInputStream = response.getBody();
return responseInputStream;
}
}
在标记为???
的位置,我无法确定要调用哪个方法才能将响应体作为InputStream
接收。
像request.asObject(InputStream.class)
这样的东西是不起作用的,因为这个方法使用对象映射器将响应编组到一个Java类中(当然没有一个用于InputStream
的类)。
发布于 2019-07-31 20:16:25
您可以像这样获得原始的响应输入流:
HttpResponse<InputStream> response = request.asObject(raw -> raw.getContent());
InputStream responseInputStream = response.getBody();
如果您要求输入流在lambda执行后不立即关闭,则需要使用异步方法:
CompletableFuture<HttpResponse<InputStream>> responseFuture = request.asObjectAsync(raw -> raw.getContent());
HttpResponse<InputStream> response = responseFuture.get();
InputStream responseInputStream = response.getBody();
https://stackoverflow.com/questions/57289844
复制相似问题