< prev index next >
src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpResponse.java
Print this page
*** 37,46 ****
--- 37,47 ----
import java.nio.charset.StandardCharsets;
import java.nio.file.OpenOption;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
+ import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.Flow;
*** 268,277 ****
--- 269,296 ----
return BodyProcessor.asString(charset);
}
return BodyProcessor.asString(charsetFrom(headers));
};
}
+ /**
+ * Returns a {@code BodyHandler} which returns {@linkplain
+ * BodyProcessor#buffering(BodyProcessor,long) buffering BodyProcessors} that
+ * buffer data before delivering it to the processors created by the given
+ * {@code downstream} handler. These {@code BodyProcessor}
+ * instances are created by calling
+ * {@link BodyProcessor#buffering(BodyProcessor,long) BodyProcessor.buffering()} with
+ * a processor obtained from the {@code downstream} handler and
+ * the {@code buffersize} parameter supplied to this call.
+ *
+ * @param downstream the downstream handler from the returned handler
+ * @param buffersize the buffersize parameter passed to {@link BodyProcessor#buffering(BodyProcessor,long)
+ * BodyProcessor.buffering()}
+ * @return a body handler
+ */
+ public static <T> BodyHandler<T> buffering(BodyHandler<T> downstream, long buffersize) {
+ return new BufferingHandler<>(downstream, buffersize);
+ }
/**
* Returns a {@code BodyHandler<Path>} that returns a
* {@link BodyProcessor BodyProcessor}{@code <Path>} obtained from
*** 401,413 ****
/**
* A processor for response bodies.
* {@Incubating}
* <p>
! * The object acts as a {@link Flow.Subscriber}<{@link ByteBuffer}> to
! * the HTTP client implementation which publishes ByteBuffers containing the
! * response body. The processor converts the incoming buffers of data to
* some user-defined object type {@code T}.
* <p>
* The {@link #getBody()} method returns a {@link CompletionStage}{@code <T>}
* that provides the response body object. The {@code CompletionStage} must
* be obtainable at any time. When it completes depends on the nature
--- 420,432 ----
/**
* A processor for response bodies.
* {@Incubating}
* <p>
! * The object acts as a {@link Flow.Subscriber}<{@link List}<{@link
! * ByteBuffer}>> to the HTTP client implementation which publishes ByteBuffers
! * containing the response body. The processor converts the incoming buffers of data to
* some user-defined object type {@code T}.
* <p>
* The {@link #getBody()} method returns a {@link CompletionStage}{@code <T>}
* that provides the response body object. The {@code CompletionStage} must
* be obtainable at any time. When it completes depends on the nature
*** 417,427 ****
* body has been read, because the calling code uses it to consume the data.
*
* @param <T> the response body type
*/
public interface BodyProcessor<T>
! extends Flow.Subscriber<ByteBuffer> {
/**
* Returns a {@code CompletionStage} which when completed will return the
* response body object.
*
--- 436,446 ----
* body has been read, because the calling code uses it to consume the data.
*
* @param <T> the response body type
*/
public interface BodyProcessor<T>
! extends Flow.Subscriber<List<ByteBuffer>> {
/**
* Returns a {@code CompletionStage} which when completed will return the
* response body object.
*
*** 444,453 ****
--- 463,494 ----
bytes -> new String(bytes, charset)
);
}
/**
+ * Returns a {@code BodyProcessor} which buffers data before delivering
+ * it to the given downstream processor. The processor guarantees to deliver
+ * {@code buffersize} bytes of data in each call to {@link #onNext(Object) onNext}
+ * except for the final call, just before {@link #onComplete() onComplete}
+ * is called. The final call of {@code onNext} may contain fewer than
+ * {@code buffersize}
+ * bytes.
+ * <p>
+ * The returned processor delegates its {@link #getBody()} call to the
+ * down stream processor.
+ *
+ * @param downstream the downstream processor for the returned handler
+ * @param buffersize the number of bytes guaranteed to be returned in each
+ * call to onNext() except for the last call.
+ *
+ * @return a body processor
+ */
+ public static <T> BodyProcessor<T> buffering(BodyProcessor<T> downstream, long buffersize) {
+ return new BufferingProcessor<>(downstream, buffersize);
+ }
+
+ /**
* Returns a {@code BodyProcessor} which stores the response body as a
* byte array.
* <p>
* The {@link HttpResponse} using this processor is available after the
* entire response has been read.
< prev index next >