我需要通过 HTTP 启动一些内容的下载,然后将数据作为 react 流读取。

因此,即使下载的数据很大,我几乎可以立即读取响应主体的前几个字节(无需等待整个响应主体)。然后,进行一些计算并在几秒钟内读取另一部分数据。缓存数据必须有一些限制,因为操作内存无法处理全部内容(数十 GB)。

我一直在尝试将 HttpClientsendAsync 方法与 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


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!