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()) {