响应流式数据

请求和响应主体作为公开响应流(非阻塞背压式的异步数据流)。HttpClient 实际上是请求主体的 Subscriber 和响应主体字节的 Publisher。BodyHandler 接口允许在收到实际响应主体之前检查响应代码和头部,并负责创建响应BodySubscriber。

    public abstract class HttpRequest {
        ...
        public interface BodyPublisher
                    extends Flow.Publisher<ByteBuffer> { ... }
    }
    public abstract class HttpResponse<T> {
        ...
        public interface BodyHandler<T> {
            BodySubscriber<T> apply(int statusCode, HttpHeaders responseHeaders);
        }
        public interface BodySubscriber<T>
                    extends Flow.Subscriber<List<ByteBuffer>> { ... }
    }

HttpRequest 和HttpResponse 类型提供了许多方便的工厂方法,用于创建处理常见的主体类型(如文件、字符串和字节)的请求发布者和响应订阅者。这些便捷的实现可以用于累积像字符串这种数据直到可以创建更高级 Java 类型,也可以形成数据流如文件。BodySubscriber 及 BodyPublisher 可以用于定制响应流数据处理。

    HttpRequest.BodyPublisher::fromByteArray(byte[])
    HttpRequest.BodyPublisher::fromByteArrays(Iterable)
    HttpRequest.BodyPublisher::fromFile(Path)
    HttpRequest.BodyPublisher::fromString(String)
    HttpRequest.BodyPublisher::fromInputStream(Supplier< InputStream>)
    HttpResponse.BodyHandler::asByteArray()
    HttpResponse.BodyHandler::asString()
    HttpResponse.BodyHandler::asFile(Path)
    HttpResponse.BodyHandler::discard()

java.util.concurrent.Flow 的 Publisher/Subscriber 与 HTTP Client 的 BodyPublisher/BodySubscriber 之间的类型适配器已经在 JDK 10 中增加,更多细节参考 JDK-8193366。

贡献翻译,请加 QQ: 840750575    点击这里给我发消息
数码
沪ICP备19006215号-4