/* This code is part of Freenet. It is distributed under the GNU General
* Public License, version 2 (or at your option any later version). See
* http://www.gnu.org/ for further details of the GPL. */
package freenet.support.api;
import java.io.Closeable;
import java.io.IOException;
/**
* Trivial random access file base interface. Guaranteed to be thread-safe - that is, either the
* implementation will serialise reads, or it will support parallel reads natively. The length of
* the file is constant. Many implementations will provide a nulling constructor - one that takes
* a size and creates a RandomAccessBuffer of that length whose content is all 0's.
* @author toad
*/
public interface RandomAccessBuffer extends Closeable {
public long size();
/** Read a block of data from a specific location in the file. Guaranteed to read the whole
* range or to throw, like DataInputStream.readFully(). Must throw if the file is closed.
* @param fileOffset The offset within the file to read from.
* @param buf The buffer to write to.
* @param bufOffset The offset within the buffer to the first read byte.
* @param length The length of data to read.
* @throws IOException If we were unable to read the required number of bytes etc.
* @throws IllegalArgumentException If fileOffset is negative.
*/
public void pread(long fileOffset, byte[] buf, int bufOffset, int length) throws IOException;
public void pwrite(long fileOffset, byte[] buf, int bufOffset, int length) throws IOException;
@Override
public void close();
/** Free the underlying resources. May do nothing in some implementations. You should make sure
* the object can be GC'ed as well. */
public void free();
}