Inicialización de StringBuilder para uso UTF-16 codificador

DodgyCodeException:

Considere el siguiente código en Java 11:

StringBuilder sb = new StringBuilder("one");
sb.append("δύο");  // "two"

La primera línea crea una StringBuilderque utiliza el codificador Latin1 (un byte por carácter). A continuación, la segunda línea hace que el StringBuilder para darse cuenta de que necesita utilizar el codificador UTF16 lugar, por lo que se copia el contenido actual en una nueva matriz antes de añadir los nuevos personajes UTF16.

La clase StringBuilder tiene una sobrecarga del constructor que toma un argumento capacidad inicial, que está diseñado para evitar la reasignación si ya conoce el tamaño requerido de la cadena que se construirá. Pero si usted comienza con una cadena de Inglés y luego añadir una cadena extranjera, esta sobrecarga de constructor particular es inútil, ya que todavía reasigna la matriz de bytes.

¿Hay una manera de crear una instancia de StringBuilder que los usos UTF16 desde el principio?

Stephen C:

No hay nada en la versión de Java o Java 11 de 12 StringBuilderque haría esto.

El verdadero problema es la forma en que es importante para el incremento de rendimiento que se puede obtener a partir de esto. El perfil de su aplicación para averiguar si esta reasignación no deseada contribuye significativamente a la de la aplicación general del rendimiento.

Si se va a hacer una diferencia significativa, se podría poner en práctica su propia versión StringBuilder(que se extiende las mismas interfaces de compatibilidad).

Alternativamente, si tuviera que esperar a preparar, se puede descargar el código fuente OpenJDK y desarrollar / construcción / prueba de una extensión a StringBuilder... y lo presentará como un parche para su consideración. (Si incluyó puntos de referencia que demostraron una clara mejora en el rendimiento, que ayudaría a las posibilidades de inclusión).

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=180006&siteId=1
Recomendado
Clasificación