Fix ByteBufChecksum optimisation for CRC32 and Adler32 (#9242)

Motivation:

Because of a simple bug in ByteBufChecksum#updateByteBuffer(Checksum),
ReflectiveByteBufChecksum is never used for CRC32 and Adler32, resulting
in direct ByteBuffers being checksummed byte by byte, which is
undesriable.

Modification:

Fix ByteBufChecksum#updateByteBuffer(Checksum) method to pass the
correct argument to Method#invoke(Checksum, ByteBuffer).

Result:

ReflectiveByteBufChecksum will now be used for Adler32 and CRC32 on
Java8+ and direct ByteBuffers will no longer be checksummed on slow
byte-by-byte basis.
This commit is contained in:
Aleksey Yeschenko 2019-06-16 06:32:51 +01:00 committed by Norman Maurer
parent fa1dedcc0f
commit a29532df43

View File

@ -55,7 +55,7 @@ abstract class ByteBufChecksum implements Checksum {
if (PlatformDependent.javaVersion() >= 8) { if (PlatformDependent.javaVersion() >= 8) {
try { try {
Method method = checksum.getClass().getDeclaredMethod("update", ByteBuffer.class); Method method = checksum.getClass().getDeclaredMethod("update", ByteBuffer.class);
method.invoke(method, ByteBuffer.allocate(1)); method.invoke(checksum, ByteBuffer.allocate(1));
return method; return method;
} catch (Throwable ignore) { } catch (Throwable ignore) {
return null; return null;