SmallDocumentBlockpublic class SmallDocumentBlock extends Object implements BlockWritable, ListManagedBlockStorage for documents that are too small to use regular
DocumentBlocks for their data |
Fields Summary |
---|
private byte[] | _data | private static final byte | _default_fill | private static final int | _block_size | private static final int | _blocks_per_big_block |
Constructors Summary |
---|
private SmallDocumentBlock(byte[] data, int index)
this();
System.arraycopy(data, index * _block_size, _data, 0, _block_size);
| private SmallDocumentBlock()
_data = new byte[ _block_size ];
|
Methods Summary |
---|
public static int | calcSize(int size)Calculate the storage size of a set of SmallDocumentBlocks
return size * _block_size;
| public static org.apache.poi.poifs.storage.SmallDocumentBlock[] | convert(byte[] array, int size)convert a single long array into an array of SmallDocumentBlock
instances
SmallDocumentBlock[] rval =
new SmallDocumentBlock[ (size + _block_size - 1) / _block_size ];
int offset = 0;
for (int k = 0; k < rval.length; k++)
{
rval[ k ] = new SmallDocumentBlock();
if (offset < array.length)
{
int length = Math.min(_block_size, array.length - offset);
System.arraycopy(array, offset, rval[ k ]._data, 0, length);
if (length != _block_size)
{
Arrays.fill(rval[ k ]._data, length, _block_size,
_default_fill);
}
}
else
{
Arrays.fill(rval[ k ]._data, _default_fill);
}
offset += _block_size;
}
return rval;
| public static org.apache.poi.poifs.storage.SmallDocumentBlock[] | convert(org.apache.poi.poifs.storage.BlockWritable[] store, int size)Factory for creating SmallDocumentBlocks from DocumentBlocks
ByteArrayOutputStream stream = new ByteArrayOutputStream();
for (int j = 0; j < store.length; j++)
{
store[ j ].writeBlocks(stream);
}
byte[] data = stream.toByteArray();
SmallDocumentBlock[] rval =
new SmallDocumentBlock[ convertToBlockCount(size) ];
for (int index = 0; index < rval.length; index++)
{
rval[ index ] = new SmallDocumentBlock(data, index);
}
return rval;
| private static int | convertToBlockCount(int size)
return (size + _block_size - 1) / _block_size;
| public static java.util.List | extract(org.apache.poi.poifs.storage.ListManagedBlock[] blocks)create a list of SmallDocumentBlock's from raw data
List sdbs = new ArrayList();
for (int j = 0; j < blocks.length; j++)
{
byte[] data = blocks[ j ].getData();
for (int k = 0; k < _blocks_per_big_block; k++)
{
sdbs.add(new SmallDocumentBlock(data, k));
}
}
return sdbs;
| public static int | fill(java.util.List blocks)fill out a List of SmallDocumentBlocks so that it fully occupies
a set of big blocks
int count = blocks.size();
int big_block_count = (count + _blocks_per_big_block - 1)
/ _blocks_per_big_block;
int full_count = big_block_count * _blocks_per_big_block;
for (; count < full_count; count++)
{
blocks.add(makeEmptySmallDocumentBlock());
}
return big_block_count;
| public byte[] | getData()Get the data from the block
return _data;
| private static org.apache.poi.poifs.storage.SmallDocumentBlock | makeEmptySmallDocumentBlock()
SmallDocumentBlock block = new SmallDocumentBlock();
Arrays.fill(block._data, _default_fill);
return block;
| public static void | read(org.apache.poi.poifs.storage.BlockWritable[] blocks, byte[] buffer, int offset)read data from an array of SmallDocumentBlocks
int firstBlockIndex = offset / _block_size;
int firstBlockOffset = offset % _block_size;
int lastBlockIndex = (offset + buffer.length - 1) / _block_size;
if (firstBlockIndex == lastBlockIndex)
{
System.arraycopy(
(( SmallDocumentBlock ) blocks[ firstBlockIndex ])._data,
firstBlockOffset, buffer, 0, buffer.length);
}
else
{
int buffer_offset = 0;
System.arraycopy(
(( SmallDocumentBlock ) blocks[ firstBlockIndex ])._data,
firstBlockOffset, buffer, buffer_offset,
_block_size - firstBlockOffset);
buffer_offset += _block_size - firstBlockOffset;
for (int j = firstBlockIndex + 1; j < lastBlockIndex; j++)
{
System.arraycopy((( SmallDocumentBlock ) blocks[ j ])._data,
0, buffer, buffer_offset, _block_size);
buffer_offset += _block_size;
}
System.arraycopy(
(( SmallDocumentBlock ) blocks[ lastBlockIndex ])._data, 0,
buffer, buffer_offset, buffer.length - buffer_offset);
}
| public void | writeBlocks(java.io.OutputStream stream)Write the storage to an OutputStream
stream.write(_data);
|
|