我需要通过 HTTP 开始下载一些内容,然后将数据作为反应流读取。
因此,即使下载的数据很大,我几乎可以立即读取响应正文的前几个字节(无需等待整个响应正文)。然后,进行一些计算,并在几秒钟内读取另一部分数据。缓存数据必须有一些限制,因为操作内存无法处理全部内容(数十 GB)。
我一直在尝试使用HttpClient
'ssendAsync
方法BodyHandlers.ofInputStream()
,但它总是阻塞并等待所有数据到达。
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://..."))
.build();
HttpResponse<InputStream> response = client
.sendAsync(request, HttpResponse.BodyHandlers.ofInputStream())
.get(); // this finishes as soon as the header is received
try {
InputStream stream = response.body();
byte[] test = stream.readNBytes(20); // trying to read just a few bytes
// but it waits for the whole body
} catch (IOException ex) {}
我需要更改什么以便逐渐下载响应正文?