public CompoundFile(byte[] d,
WorkbookSettings ws) throws BiffException {
super();
data = d;
settings = ws;
// First verify the OLE identifier
for (int i = 0; i < IDENTIFIER.length; i++)
{
if (data[i] != IDENTIFIER[i])
{
throw new BiffException(BiffException.unrecognizedOLEFile);
}
}
propertySets = new ArrayList();
numBigBlockDepotBlocks = IntegerHelper.getInt
(data[NUM_BIG_BLOCK_DEPOT_BLOCKS_POS],
data[NUM_BIG_BLOCK_DEPOT_BLOCKS_POS + 1],
data[NUM_BIG_BLOCK_DEPOT_BLOCKS_POS + 2],
data[NUM_BIG_BLOCK_DEPOT_BLOCKS_POS + 3]);
sbdStartBlock = IntegerHelper.getInt
(data[SMALL_BLOCK_DEPOT_BLOCK_POS],
data[SMALL_BLOCK_DEPOT_BLOCK_POS + 1],
data[SMALL_BLOCK_DEPOT_BLOCK_POS + 2],
data[SMALL_BLOCK_DEPOT_BLOCK_POS + 3]);
rootStartBlock = IntegerHelper.getInt
(data[ROOT_START_BLOCK_POS],
data[ROOT_START_BLOCK_POS + 1],
data[ROOT_START_BLOCK_POS + 2],
data[ROOT_START_BLOCK_POS + 3]);
extensionBlock = IntegerHelper.getInt
(data[EXTENSION_BLOCK_POS],
data[EXTENSION_BLOCK_POS + 1],
data[EXTENSION_BLOCK_POS + 2],
data[EXTENSION_BLOCK_POS + 3]);
numExtensionBlocks = IntegerHelper.getInt
(data[NUM_EXTENSION_BLOCK_POS],
data[NUM_EXTENSION_BLOCK_POS + 1],
data[NUM_EXTENSION_BLOCK_POS + 2],
data[NUM_EXTENSION_BLOCK_POS + 3]);
bigBlockDepotBlocks = new int[numBigBlockDepotBlocks];
int pos = BIG_BLOCK_DEPOT_BLOCKS_POS;
int bbdBlocks = numBigBlockDepotBlocks;
if (numExtensionBlocks != 0)
{
bbdBlocks = (BIG_BLOCK_SIZE - BIG_BLOCK_DEPOT_BLOCKS_POS) / 4;
}
for (int i = 0; i < bbdBlocks; i++)
{
bigBlockDepotBlocks[i] = IntegerHelper.getInt
(d[pos], d[pos + 1], d[pos + 2], d[pos + 3]);
pos += 4;
}
for (int j = 0; j < numExtensionBlocks; j++)
{
pos = (extensionBlock + 1) * BIG_BLOCK_SIZE;
int blocksToRead = Math.min(numBigBlockDepotBlocks - bbdBlocks,
BIG_BLOCK_SIZE / 4 - 1);
for (int i = bbdBlocks; i < bbdBlocks + blocksToRead; i++)
{
bigBlockDepotBlocks[i] = IntegerHelper.getInt
(d[pos], d[pos + 1], d[pos + 2], d[pos + 3]);
pos += 4;
}
bbdBlocks += blocksToRead;
if (bbdBlocks < numBigBlockDepotBlocks)
{
extensionBlock = IntegerHelper.getInt
(d[pos], d[pos + 1], d[pos + 2], d[pos + 3]);
}
}
readBigBlockDepot();
readSmallBlockDepot();
rootEntry = readData(rootStartBlock);
readPropertySets();
}
Initializes the compound file Parameters:
d - the raw data of the ole stream
ws - the workbook settings
Throws:
BiffException -
- exception:
BiffException -
|