the javadoc of MicroKernel#read currently states that
An attempt is made to read as many as length bytes, but a smaller number may be read.
under what conditions a smaller amount might be read is not specified.
with the current specification an api consumer would either have to know the length of the blob in advance (i.e. by calling MicroKernel#getLength) or would need to call the MicroKernel#read method twice to make sure that the blob content is fully read.
i suggest to clarify the contract as follows:
Reads up to length bytes of data from the specified blob into the given array of bytes where the actual number of bytes read is min(length, max(0, blobLength - pos)).