package freenet.support.api;
import java.io.IOException;
/** Serves a similar function to BucketFactory. Different factories may serve different functions
* e.g. temporary storage (not persistent across restarts) only.
* @author toad
*/
public interface LockableRandomAccessBufferFactory {
/**
* Create a bucket.
* @param size The maximum size of the data. Most factories will pre-allocate this space, and
* it may not be exceeded. However we do not guarantee that any I/O operation will complete;
* even if we have pre-allocated the disk space, we may be unable to write to it because of
* e.g. a hardware error.
* @return A LockableRandomAccessBuffer of the requested size.
* @throws IOException If an I/O error prevented the operation.
* @throws IllegalArgumentException If size < 0.
*/
public LockableRandomAccessBuffer makeRAF(long size) throws IOException;
/**
* Create a bucket with specified initial contents.
* @param initialContents Byte array from which to copy data. Data will be copied even if the
* underlying implementation is a byte array, for reasons of consistency.
* @param offset Offset within the array to start copying data from.
* @param size Number of bytes to copy i.e. length of the new RandomAccessBuffer.
* @return
* @throws IOException If an I/O error prevented the operation.
*/
public LockableRandomAccessBuffer makeRAF(byte[] initialContents, int offset, int size, boolean readOnly) throws IOException;
}