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:
Murmur3_128HashFunction.Murmur3_128Hasher,SipHashFunction.SipHasher
abstract class AbstractStreamingHasher extends AbstractHasher
A convenience base class for implementors ofHasher; handles accumulating data until an entire "chunk" (of implementation-dependent length) is ready to be hashed.
-
-
Field Summary
Fields Modifier and Type Field Description private java.nio.ByteBufferbufferBuffer via which we pass data to the hash algorithm (the implementor)private intbufferSizeNumber of bytes to be filled before process() invocation(s).private intchunkSizeNumber of bytes processed per process() invocation.
-
Constructor Summary
Constructors Modifier Constructor Description protectedAbstractStreamingHasher(int chunkSize)Constructor for use by subclasses.protectedAbstractStreamingHasher(int chunkSize, int bufferSize)Constructor for use by subclasses.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description HashCodehash()Computes a hash code based on the data that have been provided to this hasher.protected abstract HashCodemakeHash()Computes a hash code based on the data that have been provided to this hasher.private voidmunch()private voidmunchIfFull()protected abstract voidprocess(java.nio.ByteBuffer bb)Processes the available bytes of the buffer (at mostchunkbytes).protected voidprocessRemaining(java.nio.ByteBuffer bb)This is invoked for the last bytes of the input, which are not enough to fill a whole chunk.HasherputByte(byte b)Puts a byte into this sink.HasherputBytes(byte[] bytes, int off, int len)Puts a chunk of an array of bytes into this sink.HasherputBytes(java.nio.ByteBuffer readBuffer)Puts the remaining bytes of a byte buffer into this sink.private HasherputBytesInternal(java.nio.ByteBuffer readBuffer)HasherputChar(char c)Puts a character into this sink.HasherputInt(int i)Puts an int into this sink.HasherputLong(long l)Puts a long into this sink.HasherputShort(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 Detail
-
buffer
private final java.nio.ByteBuffer buffer
Buffer via which we pass data to the hash algorithm (the implementor)
-
bufferSize
private final int bufferSize
Number of bytes to be filled before process() invocation(s).
-
chunkSize
private final int chunkSize
Number of bytes processed per process() invocation.
-
-
Constructor Detail
-
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 ofbufferSizesize, 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 Detail
-
process
protected abstract void process(java.nio.ByteBuffer bb)
Processes the available bytes of the buffer (at mostchunkbytes).
-
processRemaining
protected void processRemaining(java.nio.ByteBuffer bb)
This is invoked for the last bytes of the input, which are not enough to fill a whole chunk. The passedByteBufferis guaranteed to be non-empty.This implementation simply pads with zeros and delegates to
process(ByteBuffer).
-
putBytes
public final Hasher putBytes(byte[] bytes, int off, int len)
Description copied from interface:PrimitiveSinkPuts 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:
putBytesin interfaceHasher- Specified by:
putBytesin interfacePrimitiveSink- Overrides:
putBytesin classAbstractHasher- Parameters:
bytes- a byte arrayoff- the start offset in the arraylen- the number of bytes to write- Returns:
- this instance
-
putBytes
public final Hasher putBytes(java.nio.ByteBuffer readBuffer)
Description copied from interface:PrimitiveSinkPuts the remaining bytes of a byte buffer into this sink.bytes.position()is the first byte written,bytes.limit() - 1is the last. The position of the buffer will be equal to the limit when this method returns.- Specified by:
putBytesin interfaceHasher- Specified by:
putBytesin interfacePrimitiveSink- Overrides:
putBytesin classAbstractHasher- Parameters:
readBuffer- a byte buffer- Returns:
- this instance
-
putBytesInternal
private Hasher putBytesInternal(java.nio.ByteBuffer readBuffer)
-
putByte
public final Hasher putByte(byte b)
Description copied from interface:PrimitiveSinkPuts a byte into this sink.- Parameters:
b- a byte- Returns:
- this instance
-
putShort
public final Hasher putShort(short s)
Description copied from interface:PrimitiveSinkPuts a short into this sink.- Specified by:
putShortin interfaceHasher- Specified by:
putShortin interfacePrimitiveSink- Overrides:
putShortin classAbstractHasher
-
putChar
public final Hasher putChar(char c)
Description copied from interface:PrimitiveSinkPuts a character into this sink.- Specified by:
putCharin interfaceHasher- Specified by:
putCharin interfacePrimitiveSink- Overrides:
putCharin classAbstractHasher
-
putInt
public final Hasher putInt(int i)
Description copied from interface:PrimitiveSinkPuts an int into this sink.- Specified by:
putIntin interfaceHasher- Specified by:
putIntin interfacePrimitiveSink- Overrides:
putIntin classAbstractHasher
-
putLong
public final Hasher putLong(long l)
Description copied from interface:PrimitiveSinkPuts a long into this sink.- Specified by:
putLongin interfaceHasher- Specified by:
putLongin interfacePrimitiveSink- Overrides:
putLongin classAbstractHasher
-
hash
public final HashCode hash()
Description copied from interface:HasherComputes 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
protected abstract HashCode 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()
-
-