建議在文檔不使用的InputStream在setBody
,因爲爲了獲取內容長度,庫需要加載內存中的所有內容。
而且似乎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();