Package com.google.common.hash
Class AbstractStreamingHasher
java.lang.Object
com.google.common.hash.AbstractHasher
com.google.common.hash.AbstractStreamingHasher
- All Implemented Interfaces:
Hasher
,PrimitiveSink
- Direct Known Subclasses:
Crc32cHashFunction.Crc32cHasher
,Murmur3_128HashFunction.Murmur3_128Hasher
,SipHashFunction.SipHasher
A convenience base class for implementors of
Hasher
; handles accumulating data until an
entire "chunk" (of implementation-dependent length) is ready to be hashed.-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final ByteBuffer
Buffer via which we pass data to the hash algorithm (the implementor)private final int
Number of bytes to be filled before process() invocation(s).private final int
Number of bytes processed per process() invocation. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
AbstractStreamingHasher
(int chunkSize) Constructor for use by subclasses.protected
AbstractStreamingHasher
(int chunkSize, int bufferSize) Constructor for use by subclasses. -
Method Summary
Modifier and TypeMethodDescriptionfinal HashCode
hash()
Computes a hash code based on the data that have been provided to this hasher.protected abstract HashCode
makeHash()
Computes a hash code based on the data that have been provided to this hasher.private void
munch()
private void
protected abstract void
process
(ByteBuffer bb) Processes the available bytes of the buffer (at mostchunk
bytes).protected void
This is invoked for the last bytes of the input, which are not enough to fill a whole chunk.final Hasher
putByte
(byte b) Puts a byte into this sink.final Hasher
putBytes
(byte[] bytes, int off, int len) Puts a chunk of an array of bytes into this sink.final Hasher
putBytes
(ByteBuffer readBuffer) Puts the remaining bytes of a byte buffer into this sink.private Hasher
putBytesInternal
(ByteBuffer readBuffer) final Hasher
putChar
(char c) Puts a character into this sink.final Hasher
putInt
(int i) Puts an int into this sink.final Hasher
putLong
(long l) Puts a long into this sink.final Hasher
putShort
(short s) Puts a short into this sink.Methods inherited from class com.google.common.hash.AbstractHasher
putBoolean, putBytes, putDouble, putFloat, putObject, putString, putUnencodedChars
-
Field Details
-
buffer
Buffer via which we pass data to the hash algorithm (the implementor) -
bufferSize
private final int bufferSizeNumber of bytes to be filled before process() invocation(s). -
chunkSize
private final int chunkSizeNumber of bytes processed per process() invocation.
-
-
Constructor Details
-
AbstractStreamingHasher
protected AbstractStreamingHasher(int chunkSize) Constructor for use by subclasses. This hasher instance will process chunks of the specified size.- Parameters:
chunkSize
- the number of bytes available perprocess(ByteBuffer)
invocation; must be at least 4
-
AbstractStreamingHasher
protected AbstractStreamingHasher(int chunkSize, int bufferSize) Constructor for use by subclasses. This hasher instance will process chunks of the specified size, using an internal buffer ofbufferSize
size, which must be a multiple ofchunkSize
.- Parameters:
chunkSize
- the number of bytes available perprocess(ByteBuffer)
invocation; must be at least 4bufferSize
- the size of the internal buffer. Must be a multiple of chunkSize
-
-
Method Details
-
process
Processes the available bytes of the buffer (at mostchunk
bytes). -
processRemaining
This is invoked for the last bytes of the input, which are not enough to fill a whole chunk. The passedByteBuffer
is guaranteed to be non-empty.This implementation simply pads with zeros and delegates to
process(ByteBuffer)
. -
putBytes
Description copied from interface:PrimitiveSink
Puts a chunk of an array of bytes into this sink.bytes[off]
is the first byte written,bytes[off + len - 1]
is the last.- Specified by:
putBytes
in interfaceHasher
- Specified by:
putBytes
in interfacePrimitiveSink
- Overrides:
putBytes
in classAbstractHasher
- Parameters:
bytes
- a byte arrayoff
- the start offset in the arraylen
- the number of bytes to write- Returns:
- this instance
-
putBytes
Description copied from interface:PrimitiveSink
Puts the remaining bytes of a byte buffer into this sink.bytes.position()
is the first byte written,bytes.limit() - 1
is the last. The position of the buffer will be equal to the limit when this method returns.- Specified by:
putBytes
in interfaceHasher
- Specified by:
putBytes
in interfacePrimitiveSink
- Overrides:
putBytes
in classAbstractHasher
- Parameters:
readBuffer
- a byte buffer- Returns:
- this instance
-
putBytesInternal
-
putByte
Description copied from interface:PrimitiveSink
Puts a byte into this sink.- Parameters:
b
- a byte- Returns:
- this instance
-
putShort
Description copied from interface:PrimitiveSink
Puts a short into this sink.- Specified by:
putShort
in interfaceHasher
- Specified by:
putShort
in interfacePrimitiveSink
- Overrides:
putShort
in classAbstractHasher
-
putChar
Description copied from interface:PrimitiveSink
Puts a character into this sink.- Specified by:
putChar
in interfaceHasher
- Specified by:
putChar
in interfacePrimitiveSink
- Overrides:
putChar
in classAbstractHasher
-
putInt
Description copied from interface:PrimitiveSink
Puts an int into this sink.- Specified by:
putInt
in interfaceHasher
- Specified by:
putInt
in interfacePrimitiveSink
- Overrides:
putInt
in classAbstractHasher
-
putLong
Description copied from interface:PrimitiveSink
Puts a long into this sink.- Specified by:
putLong
in interfaceHasher
- Specified by:
putLong
in interfacePrimitiveSink
- Overrides:
putLong
in classAbstractHasher
-
hash
Description copied from interface:Hasher
Computes a hash code based on the data that have been provided to this hasher. The result is unspecified if this method is called more than once on the same instance. -
makeHash
Computes a hash code based on the data that have been provided to this hasher. This is called after all chunks are handled withprocess(java.nio.ByteBuffer)
and any leftover bytes that did not make a complete chunk are handled withprocessRemaining(java.nio.ByteBuffer)
. -
munchIfFull
private void munchIfFull() -
munch
private void munch()
-