_header = new HeaderBlock(headerBuffer); sanityCheckBlockCount(_header.getBATCount());
bigBlockSize = _header.getBigBlockSize(); for(int fatAt : _header.getBATArray()) { readBAT(fatAt, loopDetector); int remainingFATs = _header.getBATCount() - _header.getBATArray().length; int nextAt = _header.getXBATIndex(); for(int i=0; i<_header.getXBATCount(); i++) { loopDetector.claim(nextAt); ByteBuffer fatData = getBlockAt(nextAt); List<BATBlock> sbats = new ArrayList<>(); _mini_store = new POIFSMiniStore(this, _property_table.getRoot(), sbats, _header); nextAt = _header.getSBATStart(); for(int i=0; i<_header.getSBATCount() && nextAt != POIFSConstants.END_OF_CHAIN; i++) { loopDetector.claim(nextAt); ByteBuffer fatData = getBlockAt(nextAt);
POIFSStream propStream = new POIFSStream(this, _header.getPropertyStart()); _property_table.preWrite(); _property_table.write(propStream); _header.getBigBlockSize().getBigBlockSize() ); _header.writeData(baos); getBlockAt(-1).put(baos.toByteArray());
public static long calculateMaximumSize(final HeaderBlock header) { return calculateMaximumSize(header.getBigBlockSize(), header.getBATCount()); }
if(_header.getBATCount() >= 109) { _header.setXBATStart(offset); } else { _xbat_blocks.get(_xbat_blocks.size()-1).setValueAt( _header.setXBATCount(_xbat_blocks.size()); } else { int[] newBATs = new int[_header.getBATCount()+1]; System.arraycopy(_header.getBATArray(), 0, newBATs, 0, newBATs.length-1); newBATs[newBATs.length-1] = offset; _header.setBATArray(newBATs); _header.setBATCount(_bat_blocks.size());
HeaderBlock header_block = new HeaderBlock(inp); displayHeader(header_block); POIFSBigBlockSize bigBlockSize = header_block.getBigBlockSize(); RawDataBlockList data_blocks = new RawDataBlockList(inp, bigBlockSize); displayRawBlocksSummary(data_blocks); header_block.getBigBlockSize(), header_block.getBATCount(), header_block.getBATArray(), header_block.getXBATCount(), header_block.getXBATIndex(), data_blocks); displayBATReader(batReader); SmallBlockTableReader.getSmallDocumentBlocks( bigBlockSize, data_blocks, properties.getRoot(), header_block.getSBATStart() );
if(_header.getSBATCount() == 0) { _header.setSBATStart(batForSBAT); _header.setSBATBlockCount(1); } else { int batOffset = _header.getSBATStart(); while(true) { loopDetector.claim(batOffset); _header.setSBATBlockCount( _header.getSBATCount() + 1 );
POIFSBigBlockSize bigBlockSize = _header_block.getBigBlockSize(); _header_block.setBATCount(blockCount); bat_blocks[j] = startBlock + j; _header_block.setBATArray(bat_blocks); _header_block.setXBATStart(startBlock + blockCount); _header_block.setXBATStart(POIFSConstants.END_OF_CHAIN); _header_block.setXBATCount(rvalue.length); return rvalue;
for(int fatAt : header.getBATArray()) { readBAT(fatAt); int remainingFATs = header.getBATCount() - header.getBATArray().length; int nextAt = header.getXBATIndex(); for(int i = 0; i < header.getXBATCount(); i++) { BATBlock xfat = BATBlock.createBATBlock(bigBlockSize, getBlockBuffer(nextAt)); xfat.setOurBlockIndex(nextAt);
/** * reading constructor (used when we've read in a file and we want * to extract the property table from it). Populates the * properties thoroughly * * @param headerBlock the header block of the file * @param filesystem the filesystem to read from * * @exception IOException if anything goes wrong (which should be * a result of the input being NFG) */ public NPropertyTable(final HeaderBlock headerBlock, final NPOIFSFileSystem filesystem) throws IOException { super( headerBlock, buildProperties( (new NPOIFSStream(filesystem, headerBlock.getPropertyStart())).iterator(), headerBlock.getBigBlockSize() ) ); _bigBigBlockSize = headerBlock.getBigBlockSize(); }
public MiniStore(final XlsInputStream is, DirectoryProperty root, HeaderBlock header, BlockStore difats) { super(is, header, POIFSConstants.SMALL_BLOCK_SIZE); this.root = root; this.difats = difats; // load all mini-FAT blocks int nextAt = header.getSBATStart(); for(int i = 0; i < header.getSBATCount() && nextAt != POIFSConstants.END_OF_CHAIN; i++) { BATBlock sfat = BATBlock.createBATBlock(header.getBigBlockSize(), difats.getBlockBuffer(nextAt)); sfat.setOurBlockIndex(nextAt); blocks.add(sfat); nextAt = difats.getNextBlock(nextAt); } }
/** * Returns the BATBlock that handles the specified offset, * and the relative index within it. * The List of BATBlocks must be in sequential order */ public static BATBlockAndIndex getBATBlockAndIndex(final int offset, final HeaderBlock header, final List<BATBlock> bats) { POIFSBigBlockSize bigBlockSize = header.getBigBlockSize(); int entriesPerBlock = bigBlockSize.getBATEntriesPerBlock(); int whichBAT = offset / entriesPerBlock; int index = offset % entriesPerBlock; return new BATBlockAndIndex( index, bats.get(whichBAT) ); }
private POIFSFileSystem(boolean newFS) { _header = new HeaderBlock(bigBlockSize); _property_table = new PropertyTable(_header); _mini_store = new POIFSMiniStore(this, _property_table.getRoot(), new ArrayList<>(), _header); _xbat_blocks = new ArrayList<>(); _bat_blocks = new ArrayList<>(); _root = null; if(newFS) { // Data needs to initially hold just the header block, // a single bat block, and an empty properties section _data = new ByteArrayBackedDataSource(IOUtils.safelyAllocate( bigBlockSize.getBigBlockSize()*3, MAX_RECORD_LENGTH)); } }
/** * Get the start block for the property table * * @return start block index */ public int getStartBlock() { return _header_block.getPropertyStart(); }
/** * Write the block's data to an existing block * * @param block the ByteBuffer of the block to which the * stored data should be written * * @exception IOException on problems writing to the block */ public void writeBlock(ByteBuffer block) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream( _header_block.getBigBlockSize().getBigBlockSize() ); _header_block.writeData(baos); block.put(baos.toByteArray()); }
private static byte[] readFirst512(InputStream stream) throws IOException { // Grab the first 512 bytes // (For 4096 sized blocks, the remaining 3584 bytes are zero) byte[] data = new byte[512]; int bsCount = IOUtils.readFully(stream, data); if(bsCount != 512) { throw alertShortRead(bsCount); } return data; }
HeaderBlock header_block = new HeaderBlock(inp); displayHeader(header_block); POIFSBigBlockSize bigBlockSize = header_block.getBigBlockSize(); RawDataBlockList data_blocks = new RawDataBlockList(inp, bigBlockSize); displayRawBlocksSummary(data_blocks); header_block.getBigBlockSize(), header_block.getBATCount(), header_block.getBATArray(), header_block.getXBATCount(), header_block.getXBATIndex(), data_blocks); displayBATReader(batReader); SmallBlockTableReader.getSmallDocumentBlocks( bigBlockSize, data_blocks, properties.getRoot(), header_block.getSBATStart() );
if(_header.getBATCount() >= 109) { _header.setXBATStart(offset); } else { _xbat_blocks.get(_xbat_blocks.size()-1).setValueAt( _header.setXBATCount(_xbat_blocks.size()); int[] newBATs = new int[_header.getBATCount()+1]; System.arraycopy(_header.getBATArray(), 0, newBATs, 0, newBATs.length-1); newBATs[newBATs.length-1] = offset; _header.setBATArray(newBATs); _header.setBATCount(_bat_blocks.size());
if(_header.getSBATCount() == 0) { _header.setSBATStart(batForSBAT); _header.setSBATBlockCount(1); } else { int batOffset = _header.getSBATStart(); while(true) { loopDetector.claim(batOffset); _header.setSBATBlockCount( _header.getSBATCount() + 1 );
POIFSBigBlockSize bigBlockSize = _header_block.getBigBlockSize(); _header_block.setBATCount(blockCount); bat_blocks[j] = startBlock + j; _header_block.setBATArray(bat_blocks); _header_block.setXBATStart(startBlock + blockCount); _header_block.setXBATStart(POIFSConstants.END_OF_CHAIN); _header_block.setXBATCount(rvalue.length); return rvalue;