我需要使用Async Http Client(https://github.com/sonatype/async-http-client)将字节数组发布到URL.Content类型是octet-stream。
如何使用async http客户端执行此操作。 我应该使用ByteArrayBodyGenerator吗?是否有任何示例代码可以查看它是如何完成的?
如果字节数组已经在内存中,那么使用ByteArrayInputStream是否更好 并使用RequestBuilder.setBody(InputStream)
答案 0 :(得分:2)
在文档中建议不要在setBody
中使用InputStream,因为为了获取内容长度,库需要将所有内容加载到内存中。
似乎ByteArrayBodyGenerator也有同样的问题。要获得内容长度,它使用bytes.length()
和bytes
的调用是您的字节数组(私有最终字节[]字节;)。因此,要获得字节数组的长度,需要将数组加载到内存中。
您可以编写自己的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();