提交 4955d08f 编写于 作者: B Brian Clozel

Use DataBuffer.write in CharSequenceEncoder

Since SPR-17558, `DataBuffer` now offers a new method to write Strings
to them. This commit makes `CharSequenceEncoder` use that.

Issue: SPR-17558
上级 6361b0cb
......@@ -16,9 +16,8 @@
package org.springframework.core.codec;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CoderMalfunctionError;
import java.nio.charset.StandardCharsets;
import java.util.Map;
......@@ -28,6 +27,7 @@ import reactor.core.publisher.Flux;
import org.springframework.core.ResolvableType;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DataBufferFactory;
import org.springframework.core.io.buffer.DataBufferUtils;
import org.springframework.core.log.LogFormatUtils;
import org.springframework.lang.Nullable;
import org.springframework.util.MimeType;
......@@ -75,9 +75,21 @@ public final class CharSequenceEncoder extends AbstractEncoder<CharSequence> {
return Hints.getLogPrefix(hints) + "Writing " + formatted;
});
}
CharBuffer charBuffer = CharBuffer.wrap(charSequence);
ByteBuffer byteBuffer = charset.encode(charBuffer);
return bufferFactory.wrap(byteBuffer);
boolean release = true;
DataBuffer dataBuffer = bufferFactory.allocateBuffer();
try {
dataBuffer.write(charSequence, charset);
release = false;
}
catch (CoderMalfunctionError ex) {
throw new EncodingException("String encoding error: " + ex.getMessage(), ex);
}
finally {
if (release) {
DataBufferUtils.release(dataBuffer);
}
}
return dataBuffer;
});
}
......
......@@ -63,8 +63,6 @@ public class CharSequenceEncoderTests
.consumeNextWith(expectString(this.foo))
.consumeNextWith(expectString(this.bar))
.verifyComplete());
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册