public abstract class HashCode
extends java.lang.Object
Modifier and Type | Class and Description |
---|---|
private static class |
HashCode.BytesHashCode |
private static class |
HashCode.IntHashCode |
private static class |
HashCode.LongHashCode |
Modifier and Type | Field and Description |
---|---|
private static char[] |
hexDigits |
Constructor and Description |
---|
HashCode() |
Modifier and Type | Method and Description |
---|---|
abstract byte[] |
asBytes()
Returns the value of this hash code as a byte array.
|
abstract int |
asInt()
Returns the first four bytes of this hashcode's bytes, converted to an
int value in little-endian order. |
abstract long |
asLong()
Returns the first eight bytes of this hashcode's bytes, converted to a
long value in little-endian order. |
abstract int |
bits()
Returns the number of bits in this hash code; a positive multiple of 8.
|
private static int |
decode(char ch) |
boolean |
equals(java.lang.Object object)
Returns
true if object is a HashCode instance with the identical byte
representation to this hash code. |
(package private) abstract boolean |
equalsSameBits(HashCode that)
Returns whether this
HashCode and that HashCode have the same value, given that
they have the same number of bits. |
static HashCode |
fromBytes(byte[] bytes)
Creates a
HashCode from a byte array. |
(package private) static HashCode |
fromBytesNoCopy(byte[] bytes)
Creates a
HashCode from a byte array. |
static HashCode |
fromInt(int hash)
Creates a 32-bit
HashCode representation of the given int value. |
static HashCode |
fromLong(long hash)
Creates a 64-bit
HashCode representation of the given long value. |
static HashCode |
fromString(java.lang.String string)
Creates a
HashCode from a hexadecimal (base 16 ) encoded string. |
(package private) byte[] |
getBytesInternal()
Returns a mutable view of the underlying bytes for the given
HashCode if it is a
byte-based hashcode. |
int |
hashCode()
Returns a "Java hash code" for this
HashCode instance; this is well-defined (so, for
example, you can safely put HashCode instances into a HashSet ) but is otherwise
probably not what you want to use. |
abstract long |
padToLong()
If this hashcode has enough bits, returns
asLong() , otherwise returns a long
value with asBytes() as the least-significant bytes and 0x00 as the remaining
most-significant bytes. |
java.lang.String |
toString()
Returns a string containing each byte of
asBytes() , in order, as a two-digit unsigned
hexadecimal number in lower case. |
int |
writeBytesTo(byte[] dest,
int offset,
int maxLength)
Copies bytes from this hash code into
dest . |
(package private) abstract void |
writeBytesToImpl(byte[] dest,
int offset,
int maxLength) |
public abstract int bits()
public abstract int asInt()
int
value in little-endian order.java.lang.IllegalStateException
- if bits() < 32
public abstract long asLong()
long
value in little-endian order.java.lang.IllegalStateException
- if bits() < 64
public abstract long padToLong()
asLong()
, otherwise returns a long
value with asBytes()
as the least-significant bytes and 0x00
as the remaining
most-significant bytes.Hashing.padToLong(HashCode)
)public abstract byte[] asBytes()
HashCode
object or any other arrays
returned by this method.public int writeBytesTo(byte[] dest, int offset, int maxLength)
dest
.dest
- the byte array into which the hash code will be writtenoffset
- the start offset in the datamaxLength
- the maximum number of bytes to writedest
java.lang.IndexOutOfBoundsException
- if there is not enough room in dest
abstract void writeBytesToImpl(byte[] dest, int offset, int maxLength)
byte[] getBytesInternal()
HashCode
if it is a
byte-based hashcode. Otherwise it returns asBytes()
. Do not mutate this
array or else you will break the immutability contract of HashCode
.abstract boolean equalsSameBits(HashCode that)
HashCode
and that HashCode
have the same value, given that
they have the same number of bits.public static HashCode fromInt(int hash)
HashCode
representation of the given int value. The underlying bytes
are interpreted in little endian order.public static HashCode fromLong(long hash)
HashCode
representation of the given long value. The underlying bytes
are interpreted in little endian order.public static HashCode fromBytes(byte[] bytes)
HashCode
from a byte array. The array is defensively copied to preserve the
immutability contract of HashCode
. The array cannot be empty.static HashCode fromBytesNoCopy(byte[] bytes)
HashCode
from a byte array. The array is not copied defensively, so it
must be handed-off so as to preserve the immutability contract of HashCode
.public static HashCode fromString(java.lang.String string)
HashCode
from a hexadecimal (base 16
) encoded string. The string must
be at least 2 characters long, and contain only valid, lower-cased hexadecimal characters.
This method accepts the exact format generated by toString()
. If you require more
lenient base 16
decoding, please use BaseEncoding.decode(java.lang.CharSequence)
(and pass the result to fromBytes(byte[])
).
private static int decode(char ch)
public final boolean equals(@CheckForNull java.lang.Object object)
true
if object
is a HashCode
instance with the identical byte
representation to this hash code.
Security note: this method uses a constant-time (not short-circuiting) implementation to protect against timing attacks.
equals
in class java.lang.Object
public final int hashCode()
HashCode
instance; this is well-defined (so, for
example, you can safely put HashCode
instances into a HashSet
) but is otherwise
probably not what you want to use.hashCode
in class java.lang.Object
public final java.lang.String toString()
asBytes()
, in order, as a two-digit unsigned
hexadecimal number in lower case.
Note that if the output is considered to be a single hexadecimal number, whether this string
is big-endian or little-endian depends on the byte order of asBytes()
. This may be
surprising for implementations of HashCode
that represent the number in big-endian
since everything else in the hashing API uniformly treats multibyte values as little-endian.
To create a HashCode
from its string representation, see fromString(java.lang.String)
.
toString
in class java.lang.Object