## org.apache.poi.poifs.filesystem
Class BlockStore

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

Direct Known Subclasses:
  NPOIFSFileSystem, NPOIFSMiniStore

    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
`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
`BlockStore()`

Method Summary
`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 2012 The Apache Software Foundation or its licensors, as applicable.