To better match OPOIFS, pad to the end of a block with 0xFF/-1
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1688543 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
75af780517
commit
605b16c061
@ -23,6 +23,7 @@ import java.io.IOException;
|
|||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -143,6 +144,15 @@ public final class NPOIFSDocument implements POIFSViewable {
|
|||||||
os.write(buf, 0, readBytes);
|
os.write(buf, 0, readBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Pad to the end of the block with -1s
|
||||||
|
int usedInBlock = length % _block_size;
|
||||||
|
if (usedInBlock != 0 && usedInBlock != _block_size) {
|
||||||
|
int toBlockEnd = _block_size - usedInBlock;
|
||||||
|
byte[] padding = new byte[toBlockEnd];
|
||||||
|
Arrays.fill(padding, (byte)0xFF);
|
||||||
|
os.write(padding);
|
||||||
|
}
|
||||||
|
|
||||||
// Tidy and return the length
|
// Tidy and return the length
|
||||||
os.close();
|
os.close();
|
||||||
return length;
|
return length;
|
||||||
|
@ -431,6 +431,7 @@ public final class TestNPOIFSMiniStore extends POITestCase {
|
|||||||
assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(3)); // Mini
|
assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(3)); // Mini
|
||||||
assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(4));
|
assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(4));
|
||||||
|
|
||||||
|
// First 2 Mini blocks will be used
|
||||||
assertEquals(2, ministore.getFreeBlock());
|
assertEquals(2, ministore.getFreeBlock());
|
||||||
|
|
||||||
// Add one more mini-stream, and check
|
// Add one more mini-stream, and check
|
||||||
@ -442,6 +443,7 @@ public final class TestNPOIFSMiniStore extends POITestCase {
|
|||||||
assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(3)); // Mini
|
assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(3)); // Mini
|
||||||
assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(4));
|
assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(4));
|
||||||
|
|
||||||
|
// One more mini-block will be used
|
||||||
assertEquals(3, ministore.getFreeBlock());
|
assertEquals(3, ministore.getFreeBlock());
|
||||||
|
|
||||||
// Check the contents too
|
// Check the contents too
|
||||||
|
Loading…
Reference in New Issue
Block a user