From 9631db71c4da502a536c787fe13b978aa9950c08 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 18 May 2020 20:09:24 +0200 Subject: [PATCH] Direct exposure of StringBuilder instead of intermediate String Closes gh-25024 --- .../ServerSentEventHttpMessageReader.java | 20 ++++++++----------- .../ServerSentEventHttpMessageWriter.java | 11 ++++------ 2 files changed, 12 insertions(+), 19 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageReader.java b/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageReader.java index 86ee2988bea..c4e372d89bb 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageReader.java +++ b/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageReader.java @@ -47,10 +47,10 @@ import org.springframework.lang.Nullable; */ public class ServerSentEventHttpMessageReader implements HttpMessageReader { - private static final DataBufferFactory bufferFactory = new DefaultDataBufferFactory(); - private static final ResolvableType STRING_TYPE = ResolvableType.forClass(String.class); + private static final DataBufferFactory bufferFactory = new DefaultDataBufferFactory(); + @Nullable private final Decoder decoder; @@ -58,8 +58,6 @@ public class ServerSentEventHttpMessageReader implements HttpMessageReader hints) { + private Object decodeData(StringBuilder data, ResolvableType dataType, Map hints) { if (String.class == dataType.resolve()) { return data.substring(0, data.length() - 1); } if (this.decoder == null) { throw new CodecException("No SSE decoder configured and the data is not String."); } - byte[] bytes = data.getBytes(StandardCharsets.UTF_8); + byte[] bytes = data.toString().getBytes(StandardCharsets.UTF_8); DataBuffer buffer = bufferFactory.wrap(bytes); // wrapping only, no allocation return this.decoder.decode(buffer, dataType, MediaType.TEXT_EVENT_STREAM, hints); } @@ -221,7 +219,6 @@ public class ServerSentEventHttpMessageReader implements HttpMessageReader Flux encodeEvent(String eventContent, T data, ResolvableType dataType, + private Flux encodeEvent(StringBuilder eventContent, T data, ResolvableType dataType, MediaType mediaType, DataBufferFactory factory, Map hints) { if (this.encoder == null) { @@ -174,16 +174,13 @@ public class ServerSentEventHttpMessageWriter implements HttpMessageWriter