FakeZipEntry: pre-allocate ByteArrayOutputStream when zip entry size is known to prevent reallocation

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1124179 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Maxim Valyanskiy 2011-05-18 10:38:08 +00:00
parent 2cf314de68
commit 209a45ee66

View File

@ -108,7 +108,20 @@ public class ZipInputStreamZipEntrySource implements ZipEntrySource {
super(entry.getName());
// Grab the de-compressed contents for later
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ByteArrayOutputStream baos;
long entrySize = entry.getSize();
if (entrySize !=-1) {
if (entrySize>=Integer.MAX_VALUE) {
throw new IOException("ZIP entry size is too large");
}
baos = new ByteArrayOutputStream((int) entrySize);
} else {
baos = new ByteArrayOutputStream();
}
byte[] buffer = new byte[4096];
int read = 0;
while( (read = inp.read(buffer)) != -1 ) {