diff --git a/spring-core/src/main/java/org/springframework/core/io/buffer/DataBuffer.java b/spring-core/src/main/java/org/springframework/core/io/buffer/DataBuffer.java index baf161047b2f0a049ebcbd4d69b981bf6fe9975a..6f98d016a880979879bdb77993e0a7b89e498add 100644 --- a/spring-core/src/main/java/org/springframework/core/io/buffer/DataBuffer.java +++ b/spring-core/src/main/java/org/springframework/core/io/buffer/DataBuffer.java @@ -264,13 +264,13 @@ public interface DataBuffer { break; } if (cr.isOverflow()) { - writePosition(outBuffer.position()); + writePosition(writePosition() + outBuffer.position()); int maximumSize = (int) (inBuffer.remaining() * charsetEncoder.maxBytesPerChar()); ensureCapacity(maximumSize); outBuffer = asByteBuffer(writePosition(), writableByteCount()); } } - writePosition(outBuffer.position()); + writePosition(writePosition() + outBuffer.position()); } return this; } diff --git a/spring-core/src/test/java/org/springframework/core/io/buffer/DataBufferTests.java b/spring-core/src/test/java/org/springframework/core/io/buffer/DataBufferTests.java index 2b78b16df92e91b1d0cebe4b18a45ceb2fa31fce..054b60f14cdd9f47189a831bd09e4b8c6a5cc74c 100644 --- a/spring-core/src/test/java/org/springframework/core/io/buffer/DataBufferTests.java +++ b/spring-core/src/test/java/org/springframework/core/io/buffer/DataBufferTests.java @@ -225,6 +225,27 @@ public class DataBufferTests extends AbstractDataBufferAllocatingTestCase { release(buffer); } + @Test + public void writeMultipleUtf8String() { + + DataBuffer buffer = createDataBuffer(1); + buffer.write("abc", StandardCharsets.UTF_8); + assertEquals(3, buffer.readableByteCount()); + + buffer.write("def", StandardCharsets.UTF_8); + assertEquals(6, buffer.readableByteCount()); + + buffer.write("ghi", StandardCharsets.UTF_8); + assertEquals(9, buffer.readableByteCount()); + + byte[] result = new byte[9]; + buffer.read(result); + + assertArrayEquals("abcdefghi".getBytes(), result); + + release(buffer); + } + @Test public void inputStream() throws IOException { DataBuffer buffer = createDataBuffer(4);