Browse Source

Buffer writes in JettyClientHttpRequest

This commit ensures that not every OutputStream.write gets written as a
separate chunk, by buffering the written data in a BufferedOutputStream.
In some cases, a large quantity of small writes would result in many
sent chunks.

Closes gh-31361
pull/31571/head
Arjen Poutsma 2 years ago
parent
commit
486503bd31
  1. 7
      spring-web/src/main/java/org/springframework/http/client/JettyClientHttpRequest.java

7
spring-web/src/main/java/org/springframework/http/client/JettyClientHttpRequest.java

@ -16,6 +16,7 @@ @@ -16,6 +16,7 @@
package org.springframework.http.client;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UncheckedIOException;
@ -44,6 +45,9 @@ import org.springframework.util.StreamUtils; @@ -44,6 +45,9 @@ import org.springframework.util.StreamUtils;
*/
class JettyClientHttpRequest extends AbstractStreamingClientHttpRequest {
private static final int CHUNK_SIZE = 1024;
private final Request request;
private final long readTimeout;
@ -85,7 +89,8 @@ class JettyClientHttpRequest extends AbstractStreamingClientHttpRequest { @@ -85,7 +89,8 @@ class JettyClientHttpRequest extends AbstractStreamingClientHttpRequest {
OutputStreamRequestContent requestContent = new OutputStreamRequestContent(contentType);
this.request.body(requestContent)
.send(responseListener);
try (OutputStream outputStream = requestContent.getOutputStream()) {
try (OutputStream outputStream =
new BufferedOutputStream(requestContent.getOutputStream(), CHUNK_SIZE)) {
body.writeTo(StreamUtils.nonClosing(outputStream));
}
}

Loading…
Cancel
Save