public final class StreamStore
extends java.lang.Object
The key of the map is a long (incremented for each stored block). The default initial value is 0. Before storing blocks into the map, the stream store checks if there is already a block with the next key, and if necessary searches the next free entry using a binary search (0 to Long.MAX_VALUE).
Before storing
The format of the binary id is: An empty id represents 0 bytes of data. In-place data is encoded as 0, the size (a variable size int), then the data. A stored block is encoded as 1, the length of the block (a variable size int), then the key (a variable size long). Multiple ids can be concatenated to concatenate the data. If the id is large, it is stored itself, which is encoded as 2, the total length (a variable size long), and the key of the block that contains the id (a variable size long).
Constructor and Description |
---|
StreamStore(java.util.Map<java.lang.Long,byte[]> map)
Create a stream store instance.
|
StreamStore(java.util.Map<java.lang.Long,byte[]> map,
java.util.function.IntConsumer onStoreCallback) |
StreamStore(java.util.Map<java.lang.Long,byte[]> map,
int minBlockSize,
int maxBlockSize) |
StreamStore(java.util.Map<java.lang.Long,byte[]> map,
int minBlockSize,
int maxBlockSize,
java.util.function.IntConsumer onStoreCallback) |
Modifier and Type | Method and Description |
---|---|
java.io.InputStream |
get(byte[] id)
Open an input stream to read data.
|
java.util.Map<java.lang.Long,byte[]> |
getMap() |
long |
getMaxBlockKey(byte[] id)
Get the key of the biggest block, of -1 for inline data.
|
long |
getMaxBlockSize() |
int |
getMinBlockSize() |
long |
getNextKey() |
boolean |
isInPlace(byte[] id)
Check whether the id itself contains all the data.
|
long |
length(byte[] id)
Calculate the number of data bytes for the given id.
|
byte[] |
put(java.io.InputStream in)
Store the stream, and return the id.
|
void |
remove(byte[] id)
Remove all stored blocks for the given id.
|
void |
setNextKey(long nextKey) |
static java.lang.String |
toString(byte[] id)
Convert the id to a human readable string.
|
public StreamStore(java.util.Map<java.lang.Long,byte[]> map)
map
- the map to store blocks of datapublic StreamStore(java.util.Map<java.lang.Long,byte[]> map, int minBlockSize, int maxBlockSize)
public StreamStore(java.util.Map<java.lang.Long,byte[]> map, java.util.function.IntConsumer onStoreCallback)
public StreamStore(java.util.Map<java.lang.Long,byte[]> map, int minBlockSize, int maxBlockSize, java.util.function.IntConsumer onStoreCallback)
public java.util.Map<java.lang.Long,byte[]> getMap()
public void setNextKey(long nextKey)
public long getNextKey()
public int getMinBlockSize()
public long getMaxBlockSize()
public byte[] put(java.io.InputStream in) throws java.io.IOException
in
- the streamjava.io.IOException
- If an I/O error occurspublic long getMaxBlockKey(byte[] id)
id
- the idpublic void remove(byte[] id)
id
- the idpublic static java.lang.String toString(byte[] id)
id
- the stream idpublic long length(byte[] id)
id
- the idpublic boolean isInPlace(byte[] id)
id
- the idpublic java.io.InputStream get(byte[] id)
id
- the id