public class OpenSSLMessageDigestJDK extends MessageDigest implements Cloneable
Modifier and Type | Class and Description |
---|---|
static class |
OpenSSLMessageDigestJDK.MD5 |
static class |
OpenSSLMessageDigestJDK.SHA1 |
static class |
OpenSSLMessageDigestJDK.SHA256 |
static class |
OpenSSLMessageDigestJDK.SHA384 |
static class |
OpenSSLMessageDigestJDK.SHA512 |
Modifier and Type | Method and Description |
---|---|
Object |
clone()
Creates and returns a copy of this
Object . |
protected byte[] |
engineDigest()
Computes and returns the final hash value for this
MessageDigestSpi . |
protected int |
engineGetDigestLength()
Returns the engine digest length in bytes.
|
protected void |
engineReset()
Puts this
MessageDigestSpi back in an initial state, such that it
is ready to compute a one way hash value. |
protected void |
engineUpdate(byte input)
Updates this
MessageDigestSpi using the given byte . |
protected void |
engineUpdate(byte[] input,
int offset,
int len)
Updates this
MessageDigestSpi using the given byte[] . |
protected void |
finalize()
Invoked when the garbage collector has detected that this instance is no longer reachable.
|
digest, digest, digest, getAlgorithm, getDigestLength, getInstance, getInstance, getInstance, getProvider, isEqual, reset, toString, update, update, update, update
engineDigest, engineUpdate
protected void engineReset()
MessageDigestSpi
MessageDigestSpi
back in an initial state, such that it
is ready to compute a one way hash value.engineReset
in class MessageDigestSpi
protected int engineGetDigestLength()
MessageDigestSpi
0
is returned.engineGetDigestLength
in class MessageDigestSpi
0
.protected void engineUpdate(byte input)
MessageDigestSpi
MessageDigestSpi
using the given byte
.engineUpdate
in class MessageDigestSpi
input
- the byte
to update this MessageDigestSpi
with.MessageDigestSpi.engineReset()
protected void engineUpdate(byte[] input, int offset, int len)
MessageDigestSpi
MessageDigestSpi
using the given byte[]
.engineUpdate
in class MessageDigestSpi
input
- the byte
array.offset
- the index of the first byte in input
to update from.len
- the number of bytes in input
to update from.protected byte[] engineDigest()
MessageDigestSpi
MessageDigestSpi
. After the digest is computed the receiver is
reset.engineDigest
in class MessageDigestSpi
MessageDigestSpi.engineReset()
public Object clone() throws CloneNotSupportedException
Object
Object
. The default
implementation returns a so-called "shallow" copy: It creates a new
instance of the same class and then copies the field values (including
object references) from this instance to the new instance. A "deep" copy,
in contrast, would also recursively clone nested objects. A subclass that
needs to implement this kind of cloning should call super.clone()
to create the new instance and then create deep copies of the nested,
mutable objects.clone
in class MessageDigest
CloneNotSupportedException
- if this object's class does not implement the Cloneable
interface.protected void finalize() throws Throwable
Object
Note that objects that override finalize
are significantly more expensive than
objects that don't. Finalizers may be run a long time after the object is no longer
reachable, depending on memory pressure, so it's a bad idea to rely on them for cleanup.
Note also that finalizers are run on a single VM-wide finalizer thread,
so doing blocking work in a finalizer is a bad idea. A finalizer is usually only necessary
for a class that has a native peer and needs to call a native method to destroy that peer.
Even then, it's better to provide an explicit close
method (and implement
Closeable
), and insist that callers manually dispose of instances. This
works well for something like files, but less well for something like a BigInteger
where typical calling code would have to deal with lots of temporaries. Unfortunately,
code that creates lots of temporaries is the worst kind of code from the point of view of
the single finalizer thread.
If you must use finalizers, consider at least providing your own
ReferenceQueue
and having your own thread process that queue.
Unlike constructors, finalizers are not automatically chained. You are responsible for
calling super.finalize()
yourself.
Uncaught exceptions thrown by finalizers are ignored and do not terminate the finalizer thread. See Effective Java Item 7, "Avoid finalizers" for more.