Browse Source

Polishing external contribution

Change position and limit on duplicate, rather than source.

See gh-30967
Closes gh-32009
pull/32318/head
Arjen Poutsma 2 years ago
parent
commit
70004e9ad0
  1. 13
      spring-core/src/main/java/org/springframework/core/io/buffer/DefaultDataBuffer.java
  2. 17
      spring-core/src/test/java/org/springframework/core/io/buffer/DefaultDataBufferTests.java

13
spring-core/src/main/java/org/springframework/core/io/buffer/DefaultDataBuffer.java

@ -37,7 +37,6 @@ import org.springframework.util.ObjectUtils; @@ -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 { @@ -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) {

17
spring-core/src/test/java/org/springframework/core/io/buffer/DefaultDataBufferTests.java

@ -36,20 +36,23 @@ class DefaultDataBufferTests { @@ -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);
}
}

Loading…
Cancel
Save