Skip to content

Commit ad3a88d

Browse files
committed
avoid buffer slicing in decodeString
Yields ~10% improvement in included Benchmark.
1 parent f3489b3 commit ad3a88d

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

src/main/java/com/maxmind/db/Decoder.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
* This class CANNOT be shared between threads
1616
*/
1717
final class Decoder {
18+
private static final Charset UTF_8 = Charset.forName("UTF-8");
19+
1820
// XXX - This is only for unit testings. We should possibly make a
1921
// constructor to set this
2022
boolean POINTER_TEST_HACK = false;
@@ -183,9 +185,11 @@ private Result decodePointer(int ctrlByte, int offset) {
183185
}
184186

185187
private String decodeString(int size) {
186-
ByteBuffer buffer = this.buffer.slice();
187-
buffer.limit(size);
188-
return Charset.forName("UTF-8").decode(buffer).toString();
188+
int oldLimit = buffer.limit();
189+
buffer.limit(buffer.position() + size);
190+
String s = UTF_8.decode(buffer).toString();
191+
buffer.limit(oldLimit);
192+
return s;
189193
}
190194

191195
private IntNode decodeUint16(int size) {

0 commit comments

Comments
 (0)