public class OnDiskArray extends Object
Modifier and Type | Field and Description |
---|---|
private RandomAccessFile |
file
Random Access File object.
|
private File |
filename
File name.
|
private static int |
HEADER_POS_SIZE
Position of file size (in records).
|
private int |
headersize
Size of the header in the file.
|
private static int |
INTERNAL_HEADER_SIZE
Size of the classes header size.
|
private FileLock |
lock
Lock for the file that will be kept while writing.
|
protected int |
magic
Magic number used to identify files.
|
private MappedByteBuffer |
map
The memory mapped buffer.
|
private int |
numrecs
Number of records in the file.
|
private int |
recordsize
Size of the records in the file.
|
private static long |
serialVersionUID
Serial version.
|
private boolean |
writable
Writable or read-only object.
|
Constructor and Description |
---|
OnDiskArray(File filename,
int magicseed,
int extraheadersize,
boolean writable)
Constructor to open an existing file.
|
OnDiskArray(File filename,
int magicseed,
int extraheadersize,
int recordsize,
boolean writable)
Constructor to open an existing file.
|
OnDiskArray(File filename,
int magicseed,
int extraheadersize,
int recordsize,
int initialsize)
Constructor to write a new file.
|
Modifier and Type | Method and Description |
---|---|
void |
close()
Explicitly close the file.
|
void |
ensureSize(int size)
Ensure that the file can fit the given number of records.
|
ByteBuffer |
getExtraHeader()
Read the extra header data.
|
protected int |
getExtraHeaderSize()
Return the size of the extra header.
|
File |
getFilename()
Get the file name.
|
int |
getNumRecords()
Get number of records in file.
|
ByteBuffer |
getRecordBuffer(int index)
Get a record buffer
|
protected int |
getRecordsize()
Get the size of a single record.
|
private long |
indexToFileposition(long index)
Compute file position from index number
|
boolean |
isWritable()
Check if the file is writable.
|
private void |
mapArray()
(Re-) map the data array.
|
static int |
mixMagic(int magic1,
int magic2)
Mix two magic numbers into one, to obtain a combined magic.
|
void |
resizeFile(int newsize)
Resize file to the intended size
|
private void |
validateHeader(boolean validateRecordSize)
Validates the header and throws an IOException if the header is invalid.
|
private static final long serialVersionUID
protected int magic
private int headersize
private int recordsize
private int numrecs
private File filename
private final RandomAccessFile file
private FileLock lock
private boolean writable
private MappedByteBuffer map
private static final int INTERNAL_HEADER_SIZE
private static final int HEADER_POS_SIZE
public OnDiskArray(File filename, int magicseed, int extraheadersize, int recordsize, int initialsize) throws IOException
filename
- File name to be opened.magicseed
- Magic number to derive real magic from.extraheadersize
- header size NOT including the internal headerrecordsize
- Record sizeinitialsize
- Initial file size (in records)IOException
- on IO errorspublic OnDiskArray(File filename, int magicseed, int extraheadersize, int recordsize, boolean writable) throws IOException
filename
- File name to be opened.magicseed
- Magic number to derive real magic from.extraheadersize
- header size NOT including the internal headerrecordsize
- Record sizewritable
- flag to open the file writableIOException
- on IO errorspublic OnDiskArray(File filename, int magicseed, int extraheadersize, boolean writable) throws IOException
getRecordsize()
filename
- File name to be opened.magicseed
- Magic number to derive real magic from.extraheadersize
- header size NOT including the internal headerwritable
- flag to open the file writableIOException
- on IO errorsprivate void mapArray() throws IOException
IOException
- on mapping error.private void validateHeader(boolean validateRecordSize) throws IOException
validateRecordSize
- IOException
public static final int mixMagic(int magic1, int magic2)
magic1
- Magic number to mix.magic2
- Magic number to mix.private long indexToFileposition(long index)
index
- Index offsetpublic void resizeFile(int newsize) throws IOException
newsize
- New file size.IOException
- on IO errorspublic ByteBuffer getRecordBuffer(int index) throws IOException
index
- Record indexIOException
- on IO errorsprotected int getExtraHeaderSize()
public ByteBuffer getExtraHeader() throws IOException
IOException
- on IO errorsprotected int getRecordsize()
public File getFilename()
public boolean isWritable()
public void close() throws IOException
IOException
- on IO errorspublic int getNumRecords()
public void ensureSize(int size) throws IOException
size
- SizeIOException