gpt4 book ai didi

java - 如何使用 java 异步 http 客户端 (ning) 库发布二进制字节

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:34:23 25 4
gpt4 key购买 nike

我需要使用异步 Http 客户端 (https://github.com/sonatype/async-http-client ) 将字节数组发布到 URL。内容类型是八位字节流。

我如何使用异步 http 客户端来做到这一点。我应该使用 ByteArrayBodyGenerator 吗?有没有示例代码可以看看它是如何完成的?

如果字节数组已经在内存中,使用ByteArrayInputStream是不是更好并使用 RequestBuilder.setBody(InputStream)

最佳答案

文档中建议不要在 setBody 中使用 InputStream,因为为了获取内容长度,库需要将所有内容加载到内存中。

而且 ByteArrayBodyGenerator 似乎也有同样的问题。要获取内容长度,它使用对 bytes.length() 的调用,而 bytes 是您的字节数组(private final byte[] bytes;)。因此,要获取字节数组的长度,需要将该数组加载到内存中。

这是来自github的源代码: https://github.com/sonatype/async-http-client/blob/master/src/main/java/com/ning/http/client/generators/ByteArrayBodyGenerator.java

您可以编写自己的 BodyGenerator 实现来避免该问题。

您还要求提供使用 BodyGenerator 的示例:

final SimpleAsyncHttpClient client = new SimpleAsyncHttpClient.Builder()
.setRequestTimeoutInMs(Integer.MAX_VALUE)
.setUrl(url)
.build();

client.post(new ByteArrayBodyGenerator(YOUR_BYTE_ARRAY)).get();

如果您想使用遗留 API:

final AsyncHttpClientConfig config
= new AsyncHttpClientConfig.Builder().setRequestTimeoutInMs(Integer.MAX_VALUE).build();

final AsyncHttpClient client = new AsyncHttpClient(config);

client.preparePost(url)
.setBody(new ByteArrayBodyGenerator(YOUR_BYTE_ARRAY))
.execute()
.get();

关于java - 如何使用 java 异步 http 客户端 (ning) 库发布二进制字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9780007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com