From c49c0e43931e92ce575578f56b7e3402e2c9b8ac Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Sun, 14 Apr 2024 02:03:02 +0700 Subject: [PATCH] Make Luna strings considerably faster --- .../main/java/org/classdump/luna/ArrayByteString.java | 4 ++++ .../main/java/org/classdump/luna/StringByteString.java | 9 +++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/luna/src/main/java/org/classdump/luna/ArrayByteString.java b/luna/src/main/java/org/classdump/luna/ArrayByteString.java index a5375720..92a6d7d3 100644 --- a/luna/src/main/java/org/classdump/luna/ArrayByteString.java +++ b/luna/src/main/java/org/classdump/luna/ArrayByteString.java @@ -58,6 +58,10 @@ class ArrayByteString extends ByteString { return false; } + if (that instanceof ArrayByteString bstring) { + return Arrays.equals(this.bytes, bstring.bytes); + } + int len = this.length(); for (int i = 0; i < len; i++) { if (this.byteAt(i) != that.byteAt(i)) { diff --git a/luna/src/main/java/org/classdump/luna/StringByteString.java b/luna/src/main/java/org/classdump/luna/StringByteString.java index 8321e6bb..b19bae1f 100644 --- a/luna/src/main/java/org/classdump/luna/StringByteString.java +++ b/luna/src/main/java/org/classdump/luna/StringByteString.java @@ -152,10 +152,15 @@ class StringByteString extends ByteString { return string.isEmpty(); } + private byte[] bytesCache; + // must not escape, may be an array from the cache! private byte[] toBytes() { - // TODO: cache the result - return string.getBytes(charset); + if (bytesCache == null) { + bytesCache = string.getBytes(charset); + } + + return bytesCache; } @Override