Browse Source

Reduce flushes in FormHttpMessageConverter

Before this commit, each part written by the FormHttpMessageConverter
would typically end with a flush, which reduced performance.
pull/30838/head
Arjen Poutsma 3 years ago
parent
commit
78bb66b0f2
  1. 29
      spring-web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java

29
spring-web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java

@ -16,6 +16,7 @@ @@ -16,6 +16,7 @@
package org.springframework.http.converter;
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLDecoder;
@ -618,7 +619,7 @@ public class FormHttpMessageConverter implements HttpMessageConverter<MultiValue @@ -618,7 +619,7 @@ public class FormHttpMessageConverter implements HttpMessageConverter<MultiValue
private boolean headersWritten = false;
public MultipartHttpOutputMessage(OutputStream outputStream, Charset charset) {
this.outputStream = outputStream;
this.outputStream = new MultipartOutputStream(outputStream);
this.charset = charset;
}
@ -654,6 +655,32 @@ public class FormHttpMessageConverter implements HttpMessageConverter<MultiValue @@ -654,6 +655,32 @@ public class FormHttpMessageConverter implements HttpMessageConverter<MultiValue
private byte[] getBytes(String name) {
return name.getBytes(this.charset);
}
}
/**
* OutputStream that neither flushes nor closes.
*/
private static class MultipartOutputStream extends FilterOutputStream {
public MultipartOutputStream(OutputStream out) {
super(out);
}
@Override
public void write(byte[] b, int off, int let) throws IOException {
this.out.write(b, off, let);
}
@Override
public void flush() {
}
@Override
public void close() {
}
}
}

Loading…
Cancel
Save