From 9f67a0f13ad42a4792ea3326e5efd423c1c56be3 Mon Sep 17 00:00:00 2001 From: Andriy Plokhotnyuk Date: Thu, 13 Feb 2025 15:28:27 +0100 Subject: [PATCH] More efficient decoding of strings --- .../shared/src/main/scala/zio/json/internal/lexer.scala | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/zio-json/shared/src/main/scala/zio/json/internal/lexer.scala b/zio-json/shared/src/main/scala/zio/json/internal/lexer.scala index 5628ec09..518ec074 100644 --- a/zio-json/shared/src/main/scala/zio/json/internal/lexer.scala +++ b/zio-json/shared/src/main/scala/zio/json/internal/lexer.scala @@ -191,7 +191,7 @@ object Lexer { def string(trace: List[JsonError], in: OneCharReader): CharSequence = { var c = in.nextNonWhitespace() if (c != '"') error("'\"'", c, trace) - var cs = new Array[Char](64) + var cs = charArrays.get var i = 0 while ({ c = in.readChar() @@ -206,6 +206,10 @@ object Lexer { new String(cs, 0, i) } + private[this] val charArrays = new ThreadLocal[Array[Char]] { + override def initialValue(): Array[Char] = new Array[Char](1024) + } + def char(trace: List[JsonError], in: OneCharReader): Char = { var c = in.nextNonWhitespace() if (c != '"') error("'\"'", c, trace)