Я пытаюсь написать оболочку для Vertx веб-клиента для загрузки тела ответа с сервера, используя Publisher
из реактивных потоков:
import org.reactivestreams.Publisher;
import io.vertx.reactivex.ext.web.client.WebClient;
interface Storage {
Publisher<ByteBuffer> load(String key);
}
class WebStorage implements Storage {
private final WebClient client;
public WebStorage(final WebClient client) {
this.client = client;
}
@Override
public Publisher<ByteBuffer> laod(final String key) {
return client.get(String.format("https://myhost/path?query=%s", key))
.rxSend()
.toFlowable()
.map(resp -> ByteBuffer.wrap(resp.body().getBytes()));
}
}
Это решение не является правильным, поскольку он читает все байты тела блокирующим способом с помощью вызова getBytes()
.
Возможно ли прочитать ответ из Vertx WebClient
порциями и преобразовать его в Publisher
(или Rx Flowable
)?