diff --git a/spring-core/src/main/java/org/springframework/core/codec/CharSequenceEncoder.java b/spring-core/src/main/java/org/springframework/core/codec/CharSequenceEncoder.java index 25ae5a517d..0b7c6658cd 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/CharSequenceEncoder.java +++ b/spring-core/src/main/java/org/springframework/core/codec/CharSequenceEncoder.java @@ -99,7 +99,7 @@ public final class CharSequenceEncoder extends AbstractEncoder { }); } - private int calculateCapacity(CharSequence sequence, Charset charset) { + int calculateCapacity(CharSequence sequence, Charset charset) { float maxBytesPerChar = this.charsetToMaxBytesPerChar .computeIfAbsent(charset, cs -> cs.newEncoder().maxBytesPerChar()); float maxBytesForSequence = sequence.length() * maxBytesPerChar; diff --git a/spring-core/src/test/java/org/springframework/core/codec/CharSequenceEncoderTests.java b/spring-core/src/test/java/org/springframework/core/codec/CharSequenceEncoderTests.java index f8f866670d..eea231acf3 100644 --- a/spring-core/src/test/java/org/springframework/core/codec/CharSequenceEncoderTests.java +++ b/spring-core/src/test/java/org/springframework/core/codec/CharSequenceEncoderTests.java @@ -16,11 +16,19 @@ package org.springframework.core.codec; +import java.nio.charset.Charset; +import java.util.stream.Stream; + +import org.junit.Test; import reactor.core.publisher.Flux; import org.springframework.core.ResolvableType; import org.springframework.util.MimeTypeUtils; +import static java.nio.charset.StandardCharsets.ISO_8859_1; +import static java.nio.charset.StandardCharsets.US_ASCII; +import static java.nio.charset.StandardCharsets.UTF_16; +import static java.nio.charset.StandardCharsets.UTF_8; import static org.junit.Assert.*; /** @@ -65,4 +73,17 @@ public class CharSequenceEncoderTests .verifyComplete()); } + @Test + public void calculateCapacity() { + String sequence = "Hello World!"; + Stream.of(UTF_8, UTF_16, ISO_8859_1, US_ASCII, Charset.forName("BIG5")) + .forEach(charset -> { + int capacity = this.encoder.calculateCapacity(sequence, charset); + int length = sequence.length(); + assertTrue(String.format("%s has capacity %d; length %d", charset, capacity, length), + capacity >= length); + }); + + } + }