Как разместить двоичные байты, используя java async http client (ning) библиотеку - PullRequest
3 голосов
/ 20 марта 2012

Мне нужно использовать Async Http Client (https://github.com/sonatype/async-http-client) для публикации байтового массива по URL-адресу. Тип содержимого - octet-stream.

Как это сделать с помощью асинхронного http-клиента.Должен ли я использовать ByteArrayBodyGenerator?Есть ли пример кода, чтобы увидеть, как это делается?

Если байтовый массив уже находится в памяти, то лучше использовать ByteArrayInputStream и использовать RequestBuilder.setBody (InputStream)

1 Ответ

2 голосов
/ 15 мая 2012

В документации рекомендуется не использовать InputStream в setBody, потому что для получения длины содержимого библиотека должна будет загрузить все в память.

И, похоже, ByteArrayBodyGenerator имеетта же проблема.Чтобы получить длину содержимого, он использует вызов bytes.length(), а 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...