public abstract class Volume
extends java.lang.Object
implements java.io.Closeable
MapDB abstraction over raw storage (file, disk partition, memory etc...).
Implementations needs to be thread safe (especially 'ensureAvailable') operation. However updates do not have to be atomic, it is clients responsibility to ensure two threads are not writing/reading into the same location.
Modifier and Type | Field and Description |
---|---|
protected java.util.concurrent.atomic.AtomicBoolean |
closed |
protected static java.util.logging.Logger |
LOG |
static VolumeFactory |
UNSAFE_VOL_FACTORY
If
sun.misc.Unsafe is available it will use Volume based on Unsafe. |
Constructor and Description |
---|
Volume() |
Modifier and Type | Method and Description |
---|---|
void |
assertZeroes(long startOffset,
long endOffset)
Check that all bytes between given offsets are zero.
|
abstract void |
clear(long startOffset,
long endOffset)
Set all bytes between
startOffset and endOffset to zero. |
void |
clearOverlap(long startOffset,
long endOffset) |
abstract void |
close() |
void |
copyFrom(java.io.InputStream input)
Copy content from InputStream into this Volume.
|
void |
copyTo(long inputOffset,
Volume target,
long targetOffset,
long size)
Transfers data from this Volume into target volume.
|
void |
copyTo(java.io.OutputStream output)
Copy content of this volume to OutputStream.
|
void |
copyTo(Volume to)
Copy content of this volume to another.
|
void |
deleteFile() |
abstract void |
ensureAvailable(long offset)
Check space allocated by Volume is bigger or equal to given offset.
|
boolean |
fileLoad()
If underlying storage is memory-mapped-file, this method will try to
load and precache all file data into disk cache.
|
protected void |
finalize() |
abstract byte |
getByte(long offset) |
abstract void |
getData(long offset,
byte[] bytes,
int bytesPos,
int size) |
abstract DataInput2 |
getDataInput(long offset,
int size) |
DataInput2 |
getDataInputOverlap(long offset,
int size) |
abstract java.io.File |
getFile()
returns underlying file if it exists
|
abstract boolean |
getFileLocked()
return true if this Volume holds exclusive lock over its file
|
abstract int |
getInt(long offset) |
abstract long |
getLong(long offset) |
long |
getPackedLong(long position)
Unpack long value from the Volume.
|
long |
getSixLong(long pos) |
int |
getUnsignedByte(long offset) |
int |
getUnsignedShort(long offset) |
long |
hash(long off,
long len,
long seed)
Calculates XXHash64 from this Volume content.
|
boolean |
isClosed() |
abstract boolean |
isReadOnly() |
abstract boolean |
isSliced() |
abstract long |
length() |
abstract void |
putByte(long offset,
byte value) |
abstract void |
putData(long offset,
byte[] src,
int srcPos,
int srcSize) |
abstract void |
putData(long offset,
java.nio.ByteBuffer buf) |
void |
putDataOverlap(long offset,
byte[] src,
int srcPos,
int srcSize) |
abstract void |
putInt(long offset,
int value) |
abstract void |
putLong(long offset,
long value) |
int |
putPackedLong(long pos,
long value)
Put packed long at given position.
|
void |
putSixLong(long pos,
long value) |
void |
putUnsignedByte(long offset,
int b) |
void |
putUnsignedShort(long offset,
int value) |
abstract int |
sliceSize() |
abstract void |
sync() |
abstract void |
truncate(long size) |
protected static final java.util.logging.Logger LOG
public static final VolumeFactory UNSAFE_VOL_FACTORY
sun.misc.Unsafe
is available it will use Volume based on Unsafe.
If Unsafe is not available for some reason (Android), use DirectByteBuffer instead.protected final java.util.concurrent.atomic.AtomicBoolean closed
public boolean fileLoad()
If underlying storage is memory-mapped-file, this method will try to
load and precache all file data into disk cache.
Most likely it will call MappedByteBuffer.load()
,
but could also read content of entire file etc
This method will not pin data into memory, they might be removed at any time.
public void assertZeroes(long startOffset, long endOffset) throws org.mapdb.DBException.DataCorruption
startOffset
- endOffset
- DBException.DataCorruption
- if some byte is not zeropublic boolean isClosed()
protected void finalize()
finalize
in class java.lang.Object
public abstract void ensureAvailable(long offset)
offset
- public abstract void truncate(long size)
public abstract void putLong(long offset, long value)
public abstract void putInt(long offset, int value)
public abstract void putByte(long offset, byte value)
public abstract void putData(long offset, byte[] src, int srcPos, int srcSize)
public abstract void putData(long offset, java.nio.ByteBuffer buf)
public void putDataOverlap(long offset, byte[] src, int srcPos, int srcSize)
public abstract long getLong(long offset)
public abstract int getInt(long offset)
public abstract byte getByte(long offset)
public abstract DataInput2 getDataInput(long offset, int size)
public DataInput2 getDataInputOverlap(long offset, int size)
public abstract void getData(long offset, byte[] bytes, int bytesPos, int size)
public abstract void close()
close
in interface java.io.Closeable
close
in interface java.lang.AutoCloseable
public abstract void sync()
public abstract int sliceSize()
-1
if not slicedpublic void deleteFile()
public abstract boolean isSliced()
public abstract long length()
public void putUnsignedShort(long offset, int value)
public int getUnsignedShort(long offset)
public int getUnsignedByte(long offset)
public void putUnsignedByte(long offset, int b)
public long getSixLong(long pos)
public void putSixLong(long pos, long value)
public int putPackedLong(long pos, long value)
value
- to be writtenpublic long getPackedLong(long position)
result & DataIO.PACK_LONG_RESULT_MASK
to remove size;position
- to read value frompublic abstract boolean isReadOnly()
public abstract java.io.File getFile()
public abstract boolean getFileLocked()
public void copyTo(long inputOffset, Volume target, long targetOffset, long size)
inputOffset
- offset inside this Volume, ie data will be read from this offsettarget
- Volume to copy data intotargetOffset
- position in target volume where data will be copied intosize
- size of data to copypublic abstract void clear(long startOffset, long endOffset)
startOffset
and endOffset
to zero.
Area between offsets must be ready for write once clear finishes.public void clearOverlap(long startOffset, long endOffset)
public void copyTo(Volume to)
public void copyFrom(java.io.InputStream input)
public void copyTo(java.io.OutputStream output)
public long hash(long off, long len, long seed)
Calculates XXHash64 from this Volume content.
off
- offset to start calculation fromlen
- length of data to calculate hashseed
- hash seedCopyright © 2018. All Rights Reserved.