From a61d2d0f9ed0b2c3587a6f2e7d6637624d0a0569 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Knut=20Olav=20L=C3=B8ite?= Date: Fri, 12 Jun 2026 19:26:06 +0200 Subject: [PATCH] chore: reuse CharsetEncoder in ChecksumResultSet Reuse the CharsetEncoder in ChecksumResultSet to prevent the creation of a new encoder for each string that we encounter. --- .../google/cloud/spanner/connection/ChecksumResultSet.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/java-spanner/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ChecksumResultSet.java b/java-spanner/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ChecksumResultSet.java index c2af543cc9b1..cc6d47b105ff 100644 --- a/java-spanner/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ChecksumResultSet.java +++ b/java-spanner/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ChecksumResultSet.java @@ -212,6 +212,7 @@ private static final class ChecksumCalculator { private final MessageDigest digest; private ByteBuffer buffer; private ByteBuffer float64Buffer; + private CharsetEncoder encoder; ChecksumCalculator() { try { @@ -338,7 +339,11 @@ private void putString(String stringValue) { // creating a new copy of (a part of) the string. E.g. using something like substring(..) // would create a copy of that part of the string, using CharBuffer.wrap(..) does not. CharBuffer source = CharBuffer.wrap(stringValue); - CharsetEncoder encoder = StandardCharsets.UTF_8.newEncoder(); + if (encoder == null) { + encoder = StandardCharsets.UTF_8.newEncoder(); + } else { + encoder.reset(); + } // source.hasRemaining() returns false when all the characters in the string have been // processed. while (source.hasRemaining()) {