From 220c45b8001a13d9b1c274abd8926b3235010384 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Wed, 11 Dec 2019 23:55:44 -0500 Subject: [PATCH] Remove indirection in StringType decoding --- .../myles/ViaVersion/api/type/types/StringType.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/common/src/main/java/us/myles/ViaVersion/api/type/types/StringType.java b/common/src/main/java/us/myles/ViaVersion/api/type/types/StringType.java index 7a0ba098d..fc3a9f340 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/type/types/StringType.java +++ b/common/src/main/java/us/myles/ViaVersion/api/type/types/StringType.java @@ -1,14 +1,15 @@ package us.myles.ViaVersion.api.type.types; -import com.google.common.base.Charsets; import com.google.common.base.Preconditions; import io.netty.buffer.ByteBuf; import us.myles.ViaVersion.api.type.Type; +import java.nio.charset.StandardCharsets; + public class StringType extends Type { // String#length() (used to limit the string in Minecraft source code) uses char[]#length private static final int maxJavaCharUtf8Length = Character.toString(Character.MAX_VALUE) - .getBytes(Charsets.UTF_8).length; + .getBytes(StandardCharsets.UTF_8).length; public StringType() { super(String.class); @@ -21,9 +22,9 @@ public class StringType extends Type { Preconditions.checkArgument(len <= Short.MAX_VALUE * maxJavaCharUtf8Length, "Cannot receive string longer than Short.MAX_VALUE * " + maxJavaCharUtf8Length + " bytes (got %s bytes)", len); - byte[] b = new byte[len]; - buffer.readBytes(b); - String string = new String(b, Charsets.UTF_8); + String string = buffer.toString(buffer.readerIndex(), len, StandardCharsets.UTF_8); + buffer.skipBytes(len); + Preconditions.checkArgument(string.length() <= Short.MAX_VALUE, "Cannot receive string longer than Short.MAX_VALUE characters (got %s bytes)", string.length()); @@ -34,7 +35,7 @@ public class StringType extends Type { public void write(ByteBuf buffer, String object) throws Exception { Preconditions.checkArgument(object.length() <= Short.MAX_VALUE, "Cannot send string longer than Short.MAX_VALUE (got %s characters)", object.length()); - byte[] b = object.getBytes(Charsets.UTF_8); + byte[] b = object.getBytes(StandardCharsets.UTF_8); Type.VAR_INT.write(buffer, b.length); buffer.writeBytes(b); }