Class Cache
java.lang.Object
org.apache.harmony.security.provider.cert.Cache
public class Cache extends Object
The caching mechanism designed to speed up the process
of Certificates/CRLs generation in the case of their repeated
generation.
It keeps correspondences between Objects (Certificates or CLRs)
and arrays of bytes on the base of which the Objects have been generated,
and provides the means to determine whether it contains the object built on
the base of particular encoded form or not. If there are such
objects they are returned from the cache, if not - newly generated
objects can be saved in the cache.
The process of Certificate/CRL generation (implemented in
So the use of the prefix is the first point to (approximately) determine whether object to be generated is in the cache or not. The failure of the predetermination process tells us that there were not object generated from the encoded form with such prefix and we should generate (decode) the object. If predetermination is successful, we conduct the accurate search on the base of whole encoded form.
So to speed up the object generation process this caching mechanism provides the following functionality:
1. With having of the beginning of the encoded form (prefix) it is possible to predetermine whether object has already been generated on the base of the encoding with the SIMILAR prefix or not. This process is not computationally expensive and takes a little time. But it prevents us from use of expensive full encoding search in the case of its failure.
2. If predetermination ends with success, the whole encoding form should be provided to make the final answer: whether object has already been generated on the base of this PARTICULAR encoded form or not. If it is so - the cached object is returned from the cache, if not - new object should be generated and saved in the cache.
Note: The length of the prefixes of the encoded forms should not be less than correspondence (default value is 28).
The process of Certificate/CRL generation (implemented in
X509CertFactoryImpl) is accompanied with
prereading of the beginning of encoded form. This prefix is used to determine
whether provided form is PEM encoding or not.So the use of the prefix is the first point to (approximately) determine whether object to be generated is in the cache or not. The failure of the predetermination process tells us that there were not object generated from the encoded form with such prefix and we should generate (decode) the object. If predetermination is successful, we conduct the accurate search on the base of whole encoded form.
So to speed up the object generation process this caching mechanism provides the following functionality:
1. With having of the beginning of the encoded form (prefix) it is possible to predetermine whether object has already been generated on the base of the encoding with the SIMILAR prefix or not. This process is not computationally expensive and takes a little time. But it prevents us from use of expensive full encoding search in the case of its failure.
2. If predetermination ends with success, the whole encoding form should be provided to make the final answer: whether object has already been generated on the base of this PARTICULAR encoded form or not. If it is so - the cached object is returned from the cache, if not - new object should be generated and saved in the cache.
Note: The length of the prefixes of the encoded forms should not be less than correspondence (default value is 28).
-
Constructor Summary
-
Method Summary
Modifier and Type Method Description booleancontains(long prefix_hash)Checks if there are any object in the cache generated on the base of encoding with prefix corresponding to the specified hash code.Objectget(long hash, byte[] encoding)Returns the object built on the base on the specified encoded form if it is contained in the cache and null otherwise.longgetHash(byte[] arr)Returns the hash code for the array.voidput(long hash, byte[] encoding, Object object)Puts the object into the cache.
-
Constructor Details
-
Cache
public Cache(int pref_size, int size)Creates the Cache object.- Parameters:
pref_size- specifies how many leading/trailing bytes of object's encoded form will be used for hash computationsize- capacity of the cache to be created.
-
Cache
public Cache(int pref_size)Creates the Cache object of size of 9.- Parameters:
pref_size- specifies how many leading/trailing bytes of object's encoded form will be used for hash computation
-
Cache
public Cache()Creates the Cache object of size of 9.
-
-
Method Details
-
getHash
public long getHash(byte[] arr)Returns the hash code for the array. This code is used to predetermine whether the object was built on the base of the similar encoding or not (by means ofcontains(long)method), to exactly determine whether object is contained in the cache or not, and to put the object in the cache. Note: parameter array should be of length not less than specified byprefix_size(default 28)- Parameters:
arr- the byte array containing at least prefix_size leading bytes of the encoding.- Returns:
- hash code for specified encoding prefix
-
contains
public boolean contains(long prefix_hash)Checks if there are any object in the cache generated on the base of encoding with prefix corresponding to the specified hash code.- Parameters:
prefix_hash- the hash code for the prefix of the encoding (retrieved by methodgetHash(byte[]))- Returns:
- false if there were not any object generated on the base of encoding with specified hash code, true otherwise.
-
get
Returns the object built on the base on the specified encoded form if it is contained in the cache and null otherwise. This method is computationally expensive and should be called only if the methodcontains(long)for the hash code returned true.- Parameters:
hash- the hash code for the prefix of the encoding (retrieved by methodgetHash(byte[]))encoding- encoded form of the required object.- Returns:
- the object corresponding to specified encoding or null if there is no such correspondence.
-
put
Puts the object into the cache.- Parameters:
hash- hash code for the prefix of the encodingencoding- the encoded form of the objectobject- the object to be saved in the cache
-