From 1d0b478c16f0d38ff66fe921da2b32df567f1515 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Sat, 19 Feb 2022 14:01:19 +0000 Subject: [PATCH] refactor some stream code git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1898221 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/poi/hpbf/model/HPBFPart.java | 7 ++-- .../java/org/apache/poi/hslf/blip/EMF.java | 11 ++--- .../org/apache/poi/hslf/blip/Metafile.java | 41 ++++++++++--------- .../java/org/apache/poi/hslf/blip/WMF.java | 8 ++-- 4 files changed, 35 insertions(+), 32 deletions(-) diff --git a/poi-scratchpad/src/main/java/org/apache/poi/hpbf/model/HPBFPart.java b/poi-scratchpad/src/main/java/org/apache/poi/hpbf/model/HPBFPart.java index 077598b1a5..f727360b34 100644 --- a/poi-scratchpad/src/main/java/org/apache/poi/hpbf/model/HPBFPart.java +++ b/poi-scratchpad/src/main/java/org/apache/poi/hpbf/model/HPBFPart.java @@ -17,11 +17,11 @@ package org.apache.poi.hpbf.model; -import java.io.ByteArrayInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import org.apache.commons.io.input.UnsynchronizedByteArrayInputStream; import org.apache.poi.poifs.filesystem.DirectoryNode; import org.apache.poi.util.IOUtils; @@ -83,8 +83,9 @@ public abstract class HPBFPart { generateData(); // Write out - ByteArrayInputStream bais = new ByteArrayInputStream(data); - dir.createDocument(path[path.length-1], bais); + try (UnsynchronizedByteArrayInputStream bais = new UnsynchronizedByteArrayInputStream(data)) { + dir.createDocument(path[path.length-1], bais); + } } /** diff --git a/poi-scratchpad/src/main/java/org/apache/poi/hslf/blip/EMF.java b/poi-scratchpad/src/main/java/org/apache/poi/hslf/blip/EMF.java index 0f95a2f2ad..0c118e50b9 100644 --- a/poi-scratchpad/src/main/java/org/apache/poi/hslf/blip/EMF.java +++ b/poi-scratchpad/src/main/java/org/apache/poi/hslf/blip/EMF.java @@ -18,11 +18,11 @@ package org.apache.poi.hslf.blip; import java.awt.Dimension; -import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.zip.InflaterInputStream; +import org.apache.commons.io.input.UnsynchronizedByteArrayInputStream; import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream; import org.apache.poi.ddf.EscherBSERecord; import org.apache.poi.ddf.EscherContainerRecord; @@ -68,10 +68,11 @@ public final class EMF extends Metafile { Header header = new Header(); header.read(rawdata, CHECKSUM_SIZE); - try (UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream(); - InputStream is = new ByteArrayInputStream(rawdata); - InflaterInputStream inflater = new InflaterInputStream(is)) { - + try ( + InputStream is = new UnsynchronizedByteArrayInputStream(rawdata); + InflaterInputStream inflater = new InflaterInputStream(is); + UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream() + ) { long len = IOUtils.skipFully(is,header.getSize() + (long)CHECKSUM_SIZE); assert(len == header.getSize() + CHECKSUM_SIZE); diff --git a/poi-scratchpad/src/main/java/org/apache/poi/hslf/blip/Metafile.java b/poi-scratchpad/src/main/java/org/apache/poi/hslf/blip/Metafile.java index e15de24c66..acb3e849a2 100644 --- a/poi-scratchpad/src/main/java/org/apache/poi/hslf/blip/Metafile.java +++ b/poi-scratchpad/src/main/java/org/apache/poi/hslf/blip/Metafile.java @@ -19,21 +19,19 @@ package org.apache.poi.hslf.blip; import java.awt.Dimension; import java.awt.Rectangle; -import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.OutputStream; import java.util.zip.DeflaterOutputStream; +import org.apache.commons.io.input.UnsynchronizedByteArrayInputStream; import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream; import org.apache.poi.ddf.EscherBSERecord; import org.apache.poi.ddf.EscherContainerRecord; import org.apache.poi.hslf.usermodel.HSLFPictureData; -import org.apache.poi.hslf.usermodel.HSLFSlideShow; import org.apache.poi.util.Internal; import org.apache.poi.util.LittleEndian; import org.apache.poi.util.LittleEndianInputStream; import org.apache.poi.util.LittleEndianOutputStream; -import org.apache.poi.util.Removal; import org.apache.poi.util.Units; /** @@ -90,26 +88,29 @@ public abstract class Metafile extends HSLFPictureData { */ private int filter = 254; - public void read(byte[] data, int offset){ - @SuppressWarnings("resource") - LittleEndianInputStream leis = new LittleEndianInputStream( - new ByteArrayInputStream(data, offset, RECORD_LENGTH)); + public void read(byte[] data, int offset) { + try ( + LittleEndianInputStream leis = new LittleEndianInputStream( + new UnsynchronizedByteArrayInputStream(data, offset, RECORD_LENGTH)) + ) { + wmfsize = leis.readInt(); - wmfsize = leis.readInt(); + int left = leis.readInt(); + int top = leis.readInt(); + int right = leis.readInt(); + int bottom = leis.readInt(); + bounds.setBounds(left, top, right - left, bottom - top); - int left = leis.readInt(); - int top = leis.readInt(); - int right = leis.readInt(); - int bottom = leis.readInt(); - bounds.setBounds(left, top, right-left, bottom-top); + int width = leis.readInt(); + int height = leis.readInt(); + size.setSize(width, height); - int width = leis.readInt(); - int height = leis.readInt(); - size.setSize(width, height); - - zipsize = leis.readInt(); - compression = leis.readUByte(); - filter = leis.readUByte(); + zipsize = leis.readInt(); + compression = leis.readUByte(); + filter = leis.readUByte(); + } catch (IOException e) { + throw new IllegalStateException(e); + } } public void write(OutputStream out) throws IOException { diff --git a/poi-scratchpad/src/main/java/org/apache/poi/hslf/blip/WMF.java b/poi-scratchpad/src/main/java/org/apache/poi/hslf/blip/WMF.java index dbd66b1f65..1e32de6d43 100644 --- a/poi-scratchpad/src/main/java/org/apache/poi/hslf/blip/WMF.java +++ b/poi-scratchpad/src/main/java/org/apache/poi/hslf/blip/WMF.java @@ -18,11 +18,11 @@ package org.apache.poi.hslf.blip; import java.awt.Dimension; -import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.zip.InflaterInputStream; +import org.apache.commons.io.input.UnsynchronizedByteArrayInputStream; import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream; import org.apache.poi.ddf.EscherBSERecord; import org.apache.poi.ddf.EscherContainerRecord; @@ -64,10 +64,10 @@ public final class WMF extends Metafile { @Override public byte[] getData(){ - try { - byte[] rawdata = getRawData(); + byte[] rawdata = getRawData(); + try (InputStream is = new UnsynchronizedByteArrayInputStream(rawdata)) { + - InputStream is = new ByteArrayInputStream( rawdata ); Header header = new Header(); header.read(rawdata, CHECKSUM_SIZE*getUIDInstanceCount()); long skipLen = header.getSize() + (long)CHECKSUM_SIZE*getUIDInstanceCount();