Class Lz4XXHash32
java.lang.Object
io.netty.handler.codec.compression.Lz4XXHash32
- All Implemented Interfaces:
Checksum
A special-purpose
ByteBufChecksum implementation for use with
Lz4FrameEncoder and Lz4FrameDecoder.
StreamingXXHash32.asChecksum() has a particularly nasty implementation
of Checksum.update(int) that allocates a single-element byte array for
every invocation.
In addition to that, it doesn't implement an overload that accepts a ByteBuffer
as an argument.
Combined, this means that we can't use ReflectiveByteBufChecksum at all,
and can't use SlowByteBufChecksum because of its atrocious performance
with direct byte buffers (allocating an array and making a JNI call for every byte
checksummed might be considered sub-optimal by some).
Block version of xxHash32 (XXHash32), however, does provide
XXHash32.hash(ByteBuffer, int) method that is efficient and does exactly
what we need, with a caveat that we can only invoke it once before having to reset.
This, however, is fine for our purposes, given the way we use it in
Lz4FrameEncoder and Lz4FrameDecoder:
reset(), followed by one update(), followed by getValue().-
Constructor Details
-
Lz4XXHash32
public Lz4XXHash32(int seed)
-
-
Method Details
-
update
public void update(int b) -
update
public void update(byte[] b, int off, int len) -
update
- See Also:
-
getValue
public long getValue() -
reset
public void reset()
-