# Class DiskDataStorage

java.lang.Object
org.apfloat.spi.DataStorage
org.apfloat.internal.DiskDataStorage

All Implemented Interfaces:
  `Serializable`

Direct Known Subclasses:
  `DoubleDiskDataStorage, FloatDiskDataStorage, IntDiskDataStorage, LongDiskDataStorage`

public abstract class DiskDataStorage extends DataStorage
Abstract base class for disk-based data storage, containing the common functionality independent of the element type.

Version:
  1.15.0
Author:
  Mikko Tommila
See Also:
  - Serialized Form

- ## Nested Class Summary

  ### Nested classes/interfaces inherited from class DataStorage

  `DataStorage.AbstractIterator, DataStorage.Iterator`

- ## Field Summary

  ### Fields inherited from class DataStorage

  `READ, READ_WRITE, WRITE`

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `DiskDataStorage()`
  Default constructor.
  `protected`
  `DiskDataStorage(DiskDataStorage diskDataStorage, long offset, long length)`
  Subsequence constructor.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected abstract ArrayAccess`
  `createArrayAccess(int mode, int startColumn, int columns, int rows)`
  Create an empty ArrayAccess.
  `protected abstract ArrayAccess`
  `createTransposedArrayAccess(int mode, int startColumn, int columns, int rows)`
  Create an empty transposed ArrayAccess.
  `protected static int`
  `getBlockSize()`
  Convenience method for getting the block size (in bytes) for the current `ApfloatContext`.
  `protected final FileChannel`
  `getFileChannel()`
  The `FileChannel` of the underlying disk file.
  `protected final String`
  `getFilename()`
  Filename of the underlying disk data storage.
  `protected abstract int`
  `getUnitSize()`
  Size of the element type, in bytes.
  `protected void`
  `implCopyFrom(DataStorage dataStorage, long size)`
  Copies the specified number of elements from another data storage to this data storage.
  `protected ArrayAccess`
  `implGetArray(int mode, int startColumn, int columns, int rows)`
  Maps a block of data to a memory array when the data is treated as a matrix.
  `protected long`
  `implGetSize()`
  Return the size of the whole data storage, not including sub-sequence settings.
  `protected ArrayAccess`
  `implGetTransposedArray(int mode, int startColumn, int columns, int rows)`
  Maps a transposed block of data to a memory array when the data is treated as a matrix.
  `protected void`
  `implSetSize(long size)`
  Sets the size of the data storage.
  `boolean`
  `isCached()`
  Is this object cached in memory.
  `protected void`
  `setArray(ArrayAccess arrayAccess, int startColumn, int columns, int rows)`
  Write the data back to the same location in the file that was retrieved with `implGetArray(int,int,int,int)`.
  `protected void`
  `setTransposedArray(ArrayAccess arrayAccess, int startColumn, int columns, int rows)`
  Write the data back to the same location in the file that was retrieved with `implGetTransposedArray(int,int,int,int)`.
  `protected void`
  `transferFrom(ReadableByteChannel in, long position, long size)`
  Transfer from a readable channel, possibly in multiple chunks.
  `protected void`
  `transferTo(WritableByteChannel out, long position, long size)`
  Transfer to a writable channel, possibly in multiple chunks.

  ### Methods inherited from class DataStorage

  `copyFrom, copyFrom, getArray, getArray, getOffset, getSize, getTransposedArray, implGetArray, implSubsequence, isReadOnly, isSubsequenced, iterator, setReadOnly, setSize, subsequence`

  ### Methods inherited from class Object

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

- ## Constructor Details

  - ### DiskDataStorage

    protected DiskDataStorage() throws ApfloatRuntimeException
    Default constructor.
    Throws:
      `ApfloatRuntimeException`

  - ### DiskDataStorage

    protected DiskDataStorage(DiskDataStorage diskDataStorage, long offset, long length)
    Subsequence constructor.
    Parameters:
      `diskDataStorage` - The originating data storage.
      `offset` - The subsequence starting position.
      `length` - The subsequence length.

- ## Method Details

  - ### isCached

    public boolean isCached()
    Description copied from class: `DataStorage`
    Is this object cached in memory.
    Specified by:
      `isCached` in class `DataStorage`
    Returns:
      `true` if this object is cached in memory, `false` if not.

  - ### implCopyFrom

    protected void implCopyFrom(DataStorage dataStorage, long size) throws ApfloatRuntimeException
    Description copied from class: `DataStorage`
    Copies the specified number of elements from another data storage to this data storage. The validity of the arguments of this method do not need to be checked.
    Specified by:
      `implCopyFrom` in class `DataStorage`
    Parameters:
      `dataStorage` - The data storage where the data should be copied from.
      `size` - The number of elements to be copied.
    Throws:
      `ApfloatRuntimeException`

  - ### implGetSize

    protected long implGetSize() throws ApfloatRuntimeException
    Description copied from class: `DataStorage`
    Return the size of the whole data storage, not including sub-sequence settings.
    Specified by:
      `implGetSize` in class `DataStorage`
    Returns:
      The size of the whole data storage, not including sub-sequence settings.
    Throws:
      `ApfloatRuntimeException`

  - ### implSetSize

    protected void implSetSize(long size) throws ApfloatRuntimeException
    Description copied from class: `DataStorage`
    Sets the size of the data storage. The validity of the arguments of this method do not need to be checked.
    Specified by:
      `implSetSize` in class `DataStorage`
    Parameters:
      `size` - The size of the data storage.
    Throws:
      `ApfloatRuntimeException`

  - ### implGetArray

    protected ArrayAccess implGetArray(int mode, int startColumn, int columns, int rows) throws ApfloatRuntimeException
    Description copied from class: `DataStorage`
    Maps a block of data to a memory array when the data is treated as a matrix. The validity of the arguments of this method do not need to be checked.
    Specified by:
      `implGetArray` in class `DataStorage`
    Parameters:
      `mode` - Whether the array is prepared for reading, writing or both. The value should be `DataStorage.READ`, `DataStorage.WRITE` or a combination of these.
      `startColumn` - The starting column where data is read.
      `columns` - The number of columns of data to read.
      `rows` - The number of rows of data to read. This should be equivalent to n1, number of rows in the matrix.
    Returns:
      Access to an array of size `columns` x `rows` containing the data.
    Throws:
      `ApfloatRuntimeException`

  - ### implGetTransposedArray

    protected ArrayAccess implGetTransposedArray(int mode, int startColumn, int columns, int rows) throws ApfloatRuntimeException
    Description copied from class: `DataStorage`
    Maps a transposed block of data to a memory array when the data is treated as a matrix. The validity of the arguments of this method do not need to be checked.
    Specified by:
      `implGetTransposedArray` in class `DataStorage`
    Parameters:
      `mode` - Whether the array is prepared for reading, writing or both. The value should be `DataStorage.READ`, `DataStorage.WRITE` or a combination of these.
      `startColumn` - The starting column where data is read.
      `columns` - The number of columns of data to read.
      `rows` - The number of rows of data to read. This should be equivalent to n1, number of rows in the matrix.
    Returns:
      Access to an array of size `columns` x `rows` containing the transposed data.
    Throws:
      `ApfloatRuntimeException`

  - ### setArray

    protected void setArray(ArrayAccess arrayAccess, int startColumn, int columns, int rows) throws ApfloatRuntimeException
    Write the data back to the same location in the file that was retrieved with `implGetArray(int,int,int,int)`.
    Parameters:
      `arrayAccess` - The transposed array access.
      `startColumn` - The starting column where data is stored.
      `columns` - The number of columns of data.
      `rows` - The number of rows of data.
    Throws:
      `ApfloatRuntimeException`
    Since:
      1.7.0

  - ### setTransposedArray

    protected void setTransposedArray(ArrayAccess arrayAccess, int startColumn, int columns, int rows) throws ApfloatRuntimeException
    Write the data back to the same location in the file that was retrieved with `implGetTransposedArray(int,int,int,int)`.
    Parameters:
      `arrayAccess` - The transposed array access.
      `startColumn` - The starting column where data is stored.
      `columns` - The number of columns of data.
      `rows` - The number of rows of data.
    Throws:
      `ApfloatRuntimeException`
    Since:
      1.7.0

  - ### createArrayAccess

    protected abstract ArrayAccess createArrayAccess(int mode, int startColumn, int columns, int rows)
    Create an empty ArrayAccess.
    Parameters:
      `mode` - Whether the array is prepared for reading, writing or both. The value should be `DataStorage.READ`, `DataStorage.WRITE` or a combination of these.
      `startColumn` - The starting column where data is stored.
      `columns` - The number of columns of data.
      `rows` - The number of rows of data.
    Returns:
      Access to an empty array of the specified size and position.
    Since:
      1.7.0

  - ### createTransposedArrayAccess

    protected abstract ArrayAccess createTransposedArrayAccess(int mode, int startColumn, int columns, int rows)
    Create an empty transposed ArrayAccess.
    Parameters:
      `mode` - Whether the array is prepared for reading, writing or both. The value should be `DataStorage.READ`, `DataStorage.WRITE` or a combination of these.
      `startColumn` - The starting column where data is stored.
      `columns` - The number of columns of data.
      `rows` - The number of rows of data.
    Returns:
      Access to an empty array of the specified size and position.
    Since:
      1.7.0

  - ### transferFrom

    protected void transferFrom(ReadableByteChannel in, long position, long size) throws ApfloatRuntimeException
    Transfer from a readable channel, possibly in multiple chunks.
    Parameters:
      `in` - Input channel.
      `position` - Start position of transfer.
      `size` - Total number of bytes to transfer.
    Throws:
      `ApfloatRuntimeException`

  - ### transferTo

    protected void transferTo(WritableByteChannel out, long position, long size) throws ApfloatRuntimeException
    Transfer to a writable channel, possibly in multiple chunks.
    Parameters:
      `out` - Output channel.
      `position` - Start position of transfer.
      `size` - Total number of bytes to transfer.
    Throws:
      `ApfloatRuntimeException`

  - ### getBlockSize

    protected static int getBlockSize()
    Convenience method for getting the block size (in bytes) for the current `ApfloatContext`.
    Returns:
      I/O block size, in bytes.

  - ### getUnitSize

    protected abstract int getUnitSize()
    Size of the element type, in bytes.
    Returns:
      Size of the element type, in bytes.

  - ### getFilename

    protected final String getFilename()
    Filename of the underlying disk data storage.
    Returns:
      Filename of the underlying disk data storage.

  - ### getFileChannel

    protected final FileChannel getFileChannel()
    The `FileChannel` of the underlying disk file.
    Returns:
      The `FileChannel` of the underlying disk file.