org.apache.poi.poifs.filesystem

## Class BlockStore

- java.lang.Object
- - org.apache.poi.poifs.filesystem.BlockStore

- Direct Known Subclasses:
    POIFSFileSystem, POIFSMiniStore

      public abstract class BlockStore
      extends java.lang.Object

  This abstract class describes a way to read, store, chain and free a series of blocks (be they Big or Small ones)

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `protected class` | `BlockStore.ChainLoopDetector` Used to detect if a chain has a loop in it, so we can bail out with an error rather than spinning away for ever...

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `BlockStore()`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected abstract java.nio.ByteBuffer` | `createBlockIfNeeded(int offset)` Extends the file if required to hold blocks up to the specified offset, and return the block from there.
    `protected abstract BATBlock.BATBlockAndIndex` | `getBATBlockAndIndex(int offset)` Returns the BATBlock that handles the specified offset, and the relative index within it
    `protected abstract java.nio.ByteBuffer` | `getBlockAt(int offset)` Load the block at the given offset.
    `protected abstract int` | `getBlockStoreBlockSize()` Returns the size of the blocks managed through the block store.
    `protected abstract BlockStore.ChainLoopDetector` | `getChainLoopDetector()` Creates a Detector for loops in the chain
    `protected abstract int` | `getFreeBlock()` Finds a free block, and returns its offset.
    `protected abstract int` | `getNextBlock(int offset)` Works out what block follows the specified one.
    `protected abstract void` | `setNextBlock(int offset, int nextBlock)` Changes the record of what block follows the specified one.

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

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

- - ### Constructor Detail

    - #### BlockStore

          public BlockStore()

  - ### Method Detail

    - #### getBlockStoreBlockSize

          protected abstract int getBlockStoreBlockSize()

      Returns the size of the blocks managed through the block store.

    - #### getBlockAt

          protected abstract java.nio.ByteBuffer getBlockAt(int offset)
                                                     throws java.io.IOException

      Load the block at the given offset.
      Throws:
        `java.io.IOException`

    - #### createBlockIfNeeded

          protected abstract java.nio.ByteBuffer createBlockIfNeeded(int offset)
                                                              throws java.io.IOException

      Extends the file if required to hold blocks up to the specified offset, and return the block from there.
      Throws:
        `java.io.IOException`

    - #### getBATBlockAndIndex

          protected abstract BATBlock.BATBlockAndIndex getBATBlockAndIndex(int offset)

      Returns the BATBlock that handles the specified offset, and the relative index within it

    - #### getNextBlock

          protected abstract int getNextBlock(int offset)

      Works out what block follows the specified one.

    - #### setNextBlock

          protected abstract void setNextBlock(int offset,
                                               int nextBlock)

      Changes the record of what block follows the specified one.

    - #### getFreeBlock

          protected abstract int getFreeBlock()
                                       throws java.io.IOException

      Finds a free block, and returns its offset. This method will extend the file/stream if needed, and if doing so, allocate new FAT blocks to address the extra space.
      Throws:
        `java.io.IOException`

    - #### getChainLoopDetector

          protected abstract BlockStore.ChainLoopDetector getChainLoopDetector()
                                                                        throws java.io.IOException

      Creates a Detector for loops in the chain
      Throws:
        `java.io.IOException`

Copyright 2020 The Apache Software Foundation or its licensors, as applicable.