From 6575edf0bb87795603a21c5e2bb7816fdcc390f8 Mon Sep 17 00:00:00 2001 From: Srikanth Reddy Lingala Date: Wed, 4 Dec 2019 08:00:36 +0100 Subject: [PATCH] #112 Fix performance issues --- pom.xml | 2 +- src/main/java/net/lingala/zip4j/ZipFile.java | 31 +++++++------------ .../io/inputstream/CipherInputStream.java | 3 +- .../io/inputstream/InflaterInputStream.java | 4 ++- .../zip4j/io/inputstream/ZipInputStream.java | 2 +- 5 files changed, 19 insertions(+), 23 deletions(-) diff --git a/pom.xml b/pom.xml index d6d8d59a..cb4afb1f 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ net.lingala.zip4j zip4j - 2.2.7-SNAPSHOT + 2.2.7.1-SNAPSHOT Zip4j Zip4j - A Java library for zip files and streams diff --git a/src/main/java/net/lingala/zip4j/ZipFile.java b/src/main/java/net/lingala/zip4j/ZipFile.java index 40e0030a..6d819664 100755 --- a/src/main/java/net/lingala/zip4j/ZipFile.java +++ b/src/main/java/net/lingala/zip4j/ZipFile.java @@ -280,7 +280,7 @@ public void addFiles(List filesToAdd, ZipParameters parameters) throws Zip assertFilesExist(filesToAdd); - checkZipModel(); + readZipInfo(); if (zipModel == null) { throw new ZipException("internal error: zip model is null"); @@ -350,7 +350,7 @@ public void addFolder(File folderToAdd, ZipParameters zipParameters) throws ZipE */ private void addFolder(File folderToAdd, ZipParameters zipParameters, boolean checkSplitArchive) throws ZipException { - checkZipModel(); + readZipInfo(); if (zipModel == null) { throw new ZipException("internal error: zip model is null"); @@ -389,7 +389,7 @@ public void addStream(InputStream inputStream, ZipParameters parameters) throws this.setRunInThread(false); - checkZipModel(); + readZipInfo(); if (zipModel == null) { throw new ZipException("internal error: zip model is null"); @@ -696,7 +696,7 @@ public void mergeSplitFiles(File outputZipFile) throws ZipException { throw new ZipException("output Zip File already exists"); } - checkZipModel(); + readZipInfo(); if (this.zipModel == null) { throw new ZipException("zip model is null, corrupt zip file?"); @@ -746,7 +746,7 @@ public String getComment() throws ZipException { throw new ZipException("zip file does not exist, cannot read comment"); } - checkZipModel(); + readZipInfo(); if (zipModel == null) { throw new ZipException("zip model is null, cannot read comment"); @@ -773,7 +773,7 @@ public ZipInputStream getInputStream(FileHeader fileHeader) throws IOException { throw new ZipException("FileHeader is null, cannot get InputStream"); } - checkZipModel(); + readZipInfo(); if (zipModel == null) { throw new ZipException("zip model is null, cannot get inputstream"); @@ -813,7 +813,7 @@ public boolean isValidZipFile() { * @throws ZipException */ public List getSplitZipFiles() throws ZipException { - checkZipModel(); + readZipInfo(); return FileUtils.getSplitZipFiles(zipModel); } @@ -827,12 +827,16 @@ public void setPassword(char[] password) { /** * Reads the zip header information for this zip file. If the zip file - * does not exist, then this method throws an exception.

+ * does not exist, it creates an empty zip model.

* Note: This method does not read local file header information * * @throws ZipException */ private void readZipInfo() throws ZipException { + if (zipModel != null) { + return; + } + if (!zipFile.exists()) { createNewZipModel(); return; @@ -853,17 +857,6 @@ private void readZipInfo() throws ZipException { } } - /** - * Loads the zip model if zip model is null and if zip file exists. - * - * @throws ZipException - */ - private void checkZipModel() throws ZipException { - if (zipModel == null) { - readZipInfo(); - } - } - /** * Creates a new instance of zip model * diff --git a/src/main/java/net/lingala/zip4j/io/inputstream/CipherInputStream.java b/src/main/java/net/lingala/zip4j/io/inputstream/CipherInputStream.java index 49bfdef0..94e23df0 100644 --- a/src/main/java/net/lingala/zip4j/io/inputstream/CipherInputStream.java +++ b/src/main/java/net/lingala/zip4j/io/inputstream/CipherInputStream.java @@ -4,6 +4,7 @@ import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.LocalFileHeader; import net.lingala.zip4j.model.enums.CompressionMethod; +import net.lingala.zip4j.util.InternalZipConstants; import java.io.IOException; import java.io.InputStream; @@ -24,7 +25,7 @@ public CipherInputStream(ZipEntryInputStream zipEntryInputStream, LocalFileHeade this.localFileHeader = localFileHeader; if (getCompressionMethod(localFileHeader) == CompressionMethod.DEFLATE) { - lastReadRawDataCache = new byte[512]; + lastReadRawDataCache = new byte[InternalZipConstants.BUFF_SIZE]; } } diff --git a/src/main/java/net/lingala/zip4j/io/inputstream/InflaterInputStream.java b/src/main/java/net/lingala/zip4j/io/inputstream/InflaterInputStream.java index bcc49691..263e1559 100644 --- a/src/main/java/net/lingala/zip4j/io/inputstream/InflaterInputStream.java +++ b/src/main/java/net/lingala/zip4j/io/inputstream/InflaterInputStream.java @@ -1,5 +1,7 @@ package net.lingala.zip4j.io.inputstream; +import net.lingala.zip4j.util.InternalZipConstants; + import java.io.EOFException; import java.io.IOException; import java.io.PushbackInputStream; @@ -16,7 +18,7 @@ public class InflaterInputStream extends DecompressedInputStream { public InflaterInputStream(CipherInputStream cipherInputStream) { super(cipherInputStream); this.inflater = new Inflater(true); - buff = new byte[512]; + buff = new byte[InternalZipConstants.BUFF_SIZE]; } @Override diff --git a/src/main/java/net/lingala/zip4j/io/inputstream/ZipInputStream.java b/src/main/java/net/lingala/zip4j/io/inputstream/ZipInputStream.java index f444691d..30f5e540 100755 --- a/src/main/java/net/lingala/zip4j/io/inputstream/ZipInputStream.java +++ b/src/main/java/net/lingala/zip4j/io/inputstream/ZipInputStream.java @@ -70,7 +70,7 @@ public ZipInputStream(InputStream inputStream, char[] password, Charset charset) charset = InternalZipConstants.CHARSET_UTF_8; } - this.inputStream = new PushbackInputStream(inputStream, 512); + this.inputStream = new PushbackInputStream(inputStream, InternalZipConstants.BUFF_SIZE); this.password = password; this.charset = charset; }