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
This commit is contained in:
Arjen Poutsma 2023-11-07 14:02:01 +01:00
parent 0839f5b749
commit 486503bd31
1 changed files with 6 additions and 1 deletions

View File

@ -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;
*/
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 {
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));
}
}