Package 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 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 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 Description BlockStore()
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description protected abstract 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 itprotected abstract 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 chainprotected 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
releaseBuffer(ByteBuffer buffer)
Releases a mmap-ed buffer, which you are sure won't be used againprotected abstract void
setNextBlock(int offset, int nextBlock)
Changes the record of what block follows the specified one.
-
-
-
Method Detail
-
getBlockStoreBlockSize
protected abstract int getBlockStoreBlockSize()
Returns the size of the blocks managed through the block store.
-
getBlockAt
protected abstract ByteBuffer getBlockAt(int offset) throws IOException
Load the block at the given offset.- Throws:
IOException
-
createBlockIfNeeded
protected abstract ByteBuffer createBlockIfNeeded(int offset) throws IOException
Extends the file if required to hold blocks up to the specified offset, and return the block from there.- Throws:
IOException
-
releaseBuffer
protected abstract void releaseBuffer(ByteBuffer buffer)
Releases a mmap-ed buffer, which you are sure won't be used again- Parameters:
buffer
- the buffer
-
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 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:
IOException
-
getChainLoopDetector
protected abstract BlockStore.ChainLoopDetector getChainLoopDetector() throws IOException
Creates a Detector for loops in the chain- Throws:
IOException
-
-