org.mapdb.volume / Volume

Volume

abstract class Volume : 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.

Author
Jan Kotek



Constructors

<init> Volume()

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.

Properties

UNSAFE_VOL_FACTORY static val UNSAFE_VOL_FACTORY: VolumeFactory

If sun.misc.Unsafe is available it will use Volume based on Unsafe. If Unsafe is not available for some reason (Android), use DirectByteBuffer instead.

Functions

assertZeroes open fun assertZeroes(startOffset: Long, endOffset: Long): Unit

Check that all bytes between given offsets are zero. This might cross 1MB boundaries

clear abstract fun clear(startOffset: Long, endOffset: Long): Unit

Set all bytes between startOffset and endOffset to zero. Area between offsets must be ready for write once clear finishes.

clearOverlap open fun clearOverlap(startOffset: Long, endOffset: Long): Unit
close abstract fun close(): Unit
copyFrom open fun copyFrom(input: InputStream): Unit

Copy content from InputStream into this Volume.

copyTo open fun copyTo(inputOffset: Long, target: Volume, targetOffset: Long, size: Long): Unit

Transfers data from this Volume into target volume. If its possible, the implementation should override this method to enable direct memory transfer. Caller must respect slice boundaries. ie it is not possible to transfer data which cross slice boundaries.

open fun copyTo(to: Volume): Unit

Copy content of this volume to another. Target volume might grow, but is never shrank. Target is also not synced

open fun copyTo(output: OutputStream): Unit

Copy content of this volume to OutputStream.

deleteFile open fun deleteFile(): Unit
ensureAvailable abstract fun ensureAvailable(offset: Long): Unit

Check space allocated by Volume is bigger or equal to given offset. So it is safe to write into smaller offsets.

fileLoad open fun fileLoad(): Boolean

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.

getByte abstract fun getByte(offset: Long): Byte
getData abstract fun getData(offset: Long, bytes: ByteArray, bytesPos: Int, size: Int): Unit
getDataInput abstract fun getDataInput(offset: Long, size: Int): DataInput2
getDataInputOverlap open fun getDataInputOverlap(offset: Long, size: Int): DataInput2
getFile abstract fun getFile(): File

returns underlying file if it exists

getFileLocked abstract fun getFileLocked(): Boolean

return true if this Volume holds exclusive lock over its file

getInt abstract fun getInt(offset: Long): Int
getLong abstract fun getLong(offset: Long): Long
getPackedLong open fun getPackedLong(position: Long): Long

Unpack long value from the Volume. Highest 4 bits reused to indicate number of bytes read from Volume. One can use result & DataIO.PACK_LONG_RESULT_MASK to remove size;

getSixLong open fun getSixLong(pos: Long): Long
getUnsignedByte open fun getUnsignedByte(offset: Long): Int
getUnsignedShort open fun getUnsignedShort(offset: Long): Int
hash open fun hash(off: Long, len: Long, seed: Long): Long

Calculates XXHash64 from this Volume content.

isClosed open fun isClosed(): Boolean
isReadOnly abstract fun isReadOnly(): Boolean
isSliced abstract fun isSliced(): Boolean
length abstract fun length(): Long
putByte abstract fun putByte(offset: Long, value: Byte): Unit
putData abstract fun putData(offset: Long, src: ByteArray, srcPos: Int, srcSize: Int): Unit
abstract fun putData(offset: Long, buf: ByteBuffer): Unit
putDataOverlap open fun putDataOverlap(offset: Long, src: ByteArray, srcPos: Int, srcSize: Int): Unit
putInt abstract fun putInt(offset: Long, value: Int): Unit
putLong abstract fun putLong(offset: Long, value: Long): Unit
putPackedLong open fun putPackedLong(pos: Long, value: Long): Int

Put packed long at given position.

putSixLong open fun putSixLong(pos: Long, value: Long): Unit
putUnsignedByte open fun putUnsignedByte(offset: Long, b: Int): Unit
putUnsignedShort open fun putUnsignedShort(offset: Long, value: Int): Unit
sliceSize abstract fun sliceSize(): Int

sync abstract fun sync(): Unit
truncate abstract fun truncate(size: Long): Unit

Inheritors

ByteArrayVol class ByteArrayVol : Volume

Created by jan on 2/29/16.

ByteBufferVol abstract class ByteBufferVol : Volume

Abstract Volume over bunch of ByteBuffers It leaves ByteBufferVol details (allocation, disposal) on subclasses. Most methods are final for better performance (JIT compiler can inline those).

ByteBufferVolSingle abstract class ByteBufferVolSingle : Volume

Abstract Volume over single ByteBuffer, maximal size is 2GB (32bit limit). It leaves ByteBufferVol details (allocation, disposal) on subclasses. Most methods are final for better performance (JIT compiler can inline those).

FileChannelVol class FileChannelVol : Volume

Volume which uses FileChannel. Uses global lock and does not use mapped memory.

RandomAccessFileVol class RandomAccessFileVol : Volume

Created by jan on 2/29/16.

ReadOnlyVolume class ReadOnlyVolume : Volume

Created by jan on 2/29/16.

SingleByteArrayVol class SingleByteArrayVol : Volume

Volume backed by on-heap byte[] with maximal fixed size 2GB. For thread-safety it can not be grown