Polishing external contribution

Change position and limit on duplicate, rather than source.

See gh-30967
Closes gh-32009
This commit is contained in:
Arjen Poutsma 2024-02-20 12:03:23 +01:00
parent 969d0bd08b
commit 70004e9ad0
2 changed files with 17 additions and 13 deletions

View File

@ -37,7 +37,6 @@ import org.springframework.util.ObjectUtils;
* @author Arjen Poutsma
* @author Juergen Hoeller
* @author Brian Clozel
* @author Injae Kim
* @since 5.0
* @see DefaultDataBufferFactory
*/
@ -81,14 +80,16 @@ public class DefaultDataBuffer implements DataBuffer {
/**
* Directly exposes the native {@code ByteBuffer} that this buffer is based
* on also updating the {@code ByteBuffer's} position and limit to match
* the current {@link #readPosition()} and {@link #writePosition()}.
* on. The {@linkplain ByteBuffer#position() position} of the returned
* {@code ByteBuffer} is set to the {@linkplain #readPosition() read
* position}, and the {@linkplain ByteBuffer#limit()} to the
* {@linkplain #writePosition() write position}.
* @return the wrapped byte buffer
*/
public ByteBuffer getNativeBuffer() {
this.byteBuffer.position(this.readPosition);
this.byteBuffer.limit(this.writePosition);
return this.byteBuffer;
return this.byteBuffer.duplicate()
.position(this.readPosition)
.limit(this.writePosition);
}
private void setNativeBuffer(ByteBuffer byteBuffer) {

View File

@ -36,20 +36,23 @@ class DefaultDataBufferTests {
@Test // gh-30967
void getNativeBuffer() {
DefaultDataBuffer buffer = bufferFactory.allocateBuffer(256);
buffer.write("0123456789", StandardCharsets.UTF_8);
DefaultDataBuffer dataBuffer = this.bufferFactory.allocateBuffer(256);
dataBuffer.write("0123456789", StandardCharsets.UTF_8);
byte[] result = new byte[7];
buffer.read(result);
dataBuffer.read(result);
assertThat(result).isEqualTo("0123456".getBytes(StandardCharsets.UTF_8));
ByteBuffer nativeBuffer = buffer.getNativeBuffer();
ByteBuffer nativeBuffer = dataBuffer.getNativeBuffer();
assertThat(nativeBuffer.position()).isEqualTo(7);
assertThat(buffer.readPosition()).isEqualTo(7);
assertThat(dataBuffer.readPosition()).isEqualTo(7);
assertThat(nativeBuffer.limit()).isEqualTo(10);
assertThat(buffer.writePosition()).isEqualTo(10);
assertThat(dataBuffer.writePosition()).isEqualTo(10);
assertThat(nativeBuffer.capacity()).isEqualTo(256);
assertThat(dataBuffer.capacity()).isEqualTo(256);
release(buffer);
release(dataBuffer);
}
}