org.h2.mvstore

## Class FileStore

- java.lang.Object
- - org.h2.mvstore.FileStore

Direct Known Subclasses:
  OffHeapStore

    public class FileStore
    extends java.lang.Object

The default storage mechanism of the MVStore. This implementation persists data to a file. The file store is responsible to persist data and for free space management.

### Field Summary

Fields
`protected long` `fileSize` The file size (cached).
`protected FreeSpaceBitSet` `freeSpace` The free spaces between the chunks.
`protected java.util.concurrent.atomic.AtomicLong` `readBytes` The number of read bytes.
`protected java.util.concurrent.atomic.AtomicLong` `readCount` The number of read operations.
`protected java.util.concurrent.atomic.AtomicLong` `writeBytes` The number of written bytes.
`protected java.util.concurrent.atomic.AtomicLong` `writeCount` The number of write operations.

### Constructor Summary

Constructors
Constructor and Description
`FileStore()`

### Method Summary

Methods
`long` `allocate(int length)` Allocate a number of blocks and mark them as used.
`void` `clear()` Mark the file as empty.
`void` `close()` Close this store.
`void` `free(long pos, int length)` Mark the space as free.
`int` `getDefaultRetentionTime()` Get the default retention time for this store in milliseconds.
`java.nio.channels.FileChannel` `getEncryptedFile()` Get the encrypted file instance, if encryption is used.
`java.nio.channels.FileChannel` `getFile()` Get the file instance in use.
`java.lang.String` `getFileName()` Get the file name.
`int` `getFillRate()`
`long` `getReadBytes()` Get the number of read bytes since this store was opened.
`long` `getReadCount()` Get the number of read operations since this store was opened.
`long` `getWriteBytes()` Get the number of written bytes since this store was opened.
`long` `getWriteCount()` Get the number of write operations since this store was opened.
`boolean` `isReadOnly()`
`void` `markUsed(long pos, int length)` Mark the space as in use.
`void` `open(java.lang.String fileName, boolean readOnly, char[] encryptionKey)` Try to open the file.
`long` `predictAllocation(int length)` Calculate starting position of the prospective allocation.
`java.nio.ByteBuffer` `readFully(long pos, int len)` Read from the file.
`long` `size()` Get the file size.
`void` `sync()` Flush all changes.
`java.lang.String` `toString()`
`void` `truncate(long size)` Truncate the file.
`void` `writeFully(long pos, java.nio.ByteBuffer src)` Write to the file.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Field Detail

#### readCount

    protected final java.util.concurrent.atomic.AtomicLong readCount

The number of read operations.

#### readBytes

    protected final java.util.concurrent.atomic.AtomicLong readBytes

The number of read bytes.

#### writeCount

    protected final java.util.concurrent.atomic.AtomicLong writeCount

The number of write operations.

#### writeBytes

    protected final java.util.concurrent.atomic.AtomicLong writeBytes

The number of written bytes.

#### freeSpace

    protected final FreeSpaceBitSet freeSpace

The free spaces between the chunks. The first block to use is block 2 (the first two blocks are the store header).

#### fileSize

    protected long fileSize

The file size (cached).

### Constructor Detail

#### FileStore

    public FileStore()

### Method Detail

#### toString

    public java.lang.String toString()

Overrides:
  `toString` in class `java.lang.Object`

#### readFully

    public java.nio.ByteBuffer readFully(long pos,
                                int len)

Read from the file.

Parameters:
  `pos` - the write position
  `len` - the number of bytes to read
Returns:
  the byte buffer

#### writeFully

    public void writeFully(long pos,
                  java.nio.ByteBuffer src)

Write to the file.

Parameters:
  `pos` - the write position
  `src` - the source buffer

#### open

    public void open(java.lang.String fileName,
            boolean readOnly,
            char[] encryptionKey)

Try to open the file.

Parameters:
  `fileName` - the file name
  `readOnly` - whether the file should only be opened in read-only mode, even if the file is writable
  `encryptionKey` - the encryption key, or null if encryption is not used

#### close

    public void close()

Close this store.

#### sync

    public void sync()

Flush all changes.

#### size

    public long size()

Get the file size.

Returns:
  the file size

#### truncate

    public void truncate(long size)

Truncate the file.

Parameters:
  `size` - the new file size

#### getFile

    public java.nio.channels.FileChannel getFile()

Get the file instance in use.

The application may read from the file (for example for online backup), but not write to it or truncate it.

Returns:
  the file

#### getEncryptedFile

    public java.nio.channels.FileChannel getEncryptedFile()

Get the encrypted file instance, if encryption is used.

The application may read from the file (for example for online backup), but not write to it or truncate it.

Returns:
  the encrypted file, or null if encryption is not used

#### getWriteCount

    public long getWriteCount()

Get the number of write operations since this store was opened. For file based stores, this is the number of file write operations.

Returns:
  the number of write operations

#### getWriteBytes

    public long getWriteBytes()

Get the number of written bytes since this store was opened.

Returns:
  the number of write operations

#### getReadCount

    public long getReadCount()

Get the number of read operations since this store was opened. For file based stores, this is the number of file read operations.

Returns:
  the number of read operations

#### getReadBytes

    public long getReadBytes()

Get the number of read bytes since this store was opened.

Returns:
  the number of write operations

#### isReadOnly

    public boolean isReadOnly()

#### getDefaultRetentionTime

    public int getDefaultRetentionTime()

Get the default retention time for this store in milliseconds.

Returns:
  the retention time

#### markUsed

    public void markUsed(long pos,
                int length)

Mark the space as in use.

Parameters:
  `pos` - the position in bytes
  `length` - the number of bytes

#### allocate

    public long allocate(int length)

Allocate a number of blocks and mark them as used.

Parameters:
  `length` - the number of bytes to allocate
Returns:
  the start position in bytes

#### predictAllocation

    public long predictAllocation(int length)

Calculate starting position of the prospective allocation.

Parameters:
  `length` - the number of bytes to allocate
Returns:
  the start position in bytes

#### free

    public void free(long pos,
            int length)

Mark the space as free.

Parameters:
  `pos` - the position in bytes
  `length` - the number of bytes

#### getFillRate

    public int getFillRate()

#### clear

    public void clear()

Mark the file as empty.

#### getFileName

    public java.lang.String getFileName()

Get the file name.

Returns:
  the file name