Avoid byte array copy in getContentAsString
The getContentAsString method was originally added ind9b8826to avoid the extra copying inherent to calling ByteArrayOutputStream.toByteArray; however, inf83c609the class was updated to instead use FastByteArrayOutputStream, and in the process the extra copy was brought back when getContentAsString was changed to call toByteArray. Switch to calling toByteArrayUnsafe, a method provided by FastByteArrayOutputStream, which avoids the extra copy; since we immediately pass the byte array to the String constructor, and it isn't accessed anywhere else, the usage is safe. See gh-31731
This commit is contained in:
committed by
Stéphane Nicoll
parent
6ea9fdbf77
commit
e452c2e89c
@@ -205,7 +205,7 @@ public class ContentCachingRequestWrapper extends HttpServletRequestWrapper {
|
|||||||
* @see #getContentAsByteArray()
|
* @see #getContentAsByteArray()
|
||||||
*/
|
*/
|
||||||
public String getContentAsString() {
|
public String getContentAsString() {
|
||||||
return new String(this.cachedContent.toByteArray(), Charset.forName(getCharacterEncoding()));
|
return new String(this.cachedContent.toByteArrayUnsafe(), Charset.forName(getCharacterEncoding()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user