我需要通过 HTTP 启动一些内容的下载,然后将数据作为 react 流读取。
因此,即使下载的数据很大,我几乎可以立即读取响应主体的前几个字节(无需等待整个响应主体)。然后,进行一些计算并在几秒钟内读取另一部分数据。缓存数据必须有一些限制,因为操作内存无法处理全部内容(数十 GB)。
我一直在尝试将 HttpClient 的 sendAsync 方法与 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) {}
我需要更改什么才能逐渐下载响应正文?
请您参考如下方法:
这是一个错误。它已在 Java 11.0.2 中修复: https://bugs.openjdk.java.net/browse/JDK-8212926






