org.h2.mvstore
Class StreamStore

java.lang.Object
  extended by org.h2.mvstore.StreamStore

public class StreamStore
extends java.lang.Object

A facility to store streams in a map. Streams are split into blocks, which are stored in a map. Very small streams are inlined in the stream id.

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 Summary
StreamStore(java.util.Map<java.lang.Long,byte[]> map)
          Create a stream store instance.
 
Method Summary
 java.io.InputStream get(byte[] id)
          Open an input stream to read data.
 java.util.Map<java.lang.Long,byte[]> getMap()
           
 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.
protected  void onStore(int len)
          This method is called after a block of data is stored.
 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 setMaxBlockSize(int maxBlockSize)
          Set the maximum block size.
 void setMinBlockSize(int minBlockSize)
          Set the minimum block size.
 void setNextKey(long nextKey)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

StreamStore

public StreamStore(java.util.Map<java.lang.Long,byte[]> map)
Create a stream store instance.

Parameters:
map - the map to store blocks of data
Method Detail

getMap

public java.util.Map<java.lang.Long,byte[]> getMap()

setNextKey

public void setNextKey(long nextKey)

getNextKey

public long getNextKey()

setMinBlockSize

public void setMinBlockSize(int minBlockSize)
Set the minimum block size. The default is 256 bytes.

Parameters:
minBlockSize - the new value

getMinBlockSize

public int getMinBlockSize()

setMaxBlockSize

public void setMaxBlockSize(int maxBlockSize)
Set the maximum block size. The default is 256 KB.

Parameters:
maxBlockSize - the new value

getMaxBlockSize

public long getMaxBlockSize()

put

public byte[] put(java.io.InputStream in)
           throws java.io.IOException
Store the stream, and return the id.

Parameters:
in - the stream
Returns:
the id (potentially an empty array)
Throws:
java.io.IOException

onStore

protected void onStore(int len)
This method is called after a block of data is stored. Override this method to persist data if necessary.

Parameters:
len - the length of the stored block.

remove

public void remove(byte[] id)
Remove all stored blocks for the given id.

Parameters:
id - the id

length

public long length(byte[] id)
Calculate the number of data bytes for the given id. As the length is encoded in the id, this operation does not cause any reads in the map.

Parameters:
id - the id
Returns:
the length

isInPlace

public boolean isInPlace(byte[] id)
Check whether the id itself contains all the data. This operation does not cause any reads in the map.

Parameters:
id - the id
Returns:
if the id contains the data

get

public java.io.InputStream get(byte[] id)
Open an input stream to read data.

Parameters:
id - the id
Returns:
the stream