[jboss-svn-commits] JBoss Common SVN: r3375 - jzipfile/trunk/src/main/java/org/jboss/jzipfile.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Jul 14 00:55:31 EDT 2009


Author: david.lloyd at jboss.com
Date: 2009-07-14 00:55:30 -0400 (Tue, 14 Jul 2009)
New Revision: 3375

Modified:
   jzipfile/trunk/src/main/java/org/jboss/jzipfile/Zip.java
   jzipfile/trunk/src/main/java/org/jboss/jzipfile/ZipCatalogBuilder.java
Log:
Add buffering, close Inflater when the input stream is done

Modified: jzipfile/trunk/src/main/java/org/jboss/jzipfile/Zip.java
===================================================================
--- jzipfile/trunk/src/main/java/org/jboss/jzipfile/Zip.java	2009-07-13 19:38:22 UTC (rev 3374)
+++ jzipfile/trunk/src/main/java/org/jboss/jzipfile/Zip.java	2009-07-14 04:55:30 UTC (rev 3375)
@@ -39,6 +39,7 @@
 import java.util.HashSet;
 import static java.lang.Math.min;
 import static java.lang.Math.max;
+import com.jcraft.jzlib.ZInputStream;
 
 /**
  * Zip file manipulation methods.
@@ -240,7 +241,7 @@
                     return is;
                 }
                 case DEFLATE: {
-                    final LimitedInputStream is = new LimitedInputStream(new InflaterInputStream(new LimitedInputStream(inputStream, zipEntry.getCompressedSize()), new Inflater(true)), zipEntry.getSize());
+                    final LimitedInputStream is = new LimitedInputStream(new JZFInflaterStream(new LimitedInputStream(inputStream, zipEntry.getCompressedSize())), zipEntry.getSize());
                     ok = true;
                     return is;
                 }
@@ -402,4 +403,25 @@
         // convert to millis
         return new GregorianCalendar(year, month - 1, day, hour, minute, second).getTimeInMillis();
     }
+
+    private static final class JZFInflaterStream extends InflaterInputStream {
+        private final Inflater inf;
+
+        JZFInflaterStream(InputStream in) {
+            this(in, new Inflater(true));
+        }
+
+        public JZFInflaterStream(InputStream in, Inflater inf) {
+            super(in, inf, 4096);
+            this.inf = inf;
+        }
+
+        public void close() throws IOException {
+            try {
+                super.close();
+            } finally {
+                inf.end();
+            }
+        }
+    }
 }

Modified: jzipfile/trunk/src/main/java/org/jboss/jzipfile/ZipCatalogBuilder.java
===================================================================
--- jzipfile/trunk/src/main/java/org/jboss/jzipfile/ZipCatalogBuilder.java	2009-07-13 19:38:22 UTC (rev 3374)
+++ jzipfile/trunk/src/main/java/org/jboss/jzipfile/ZipCatalogBuilder.java	2009-07-14 04:55:30 UTC (rev 3375)
@@ -31,6 +31,7 @@
 import java.util.zip.ZipException;
 import java.io.InputStream;
 import java.io.IOException;
+import java.io.BufferedInputStream;
 
 final class ZipCatalogBuilder {
     private final Map<String, ZipEntry> entryMap = new LinkedHashMap<String, ZipEntry>();
@@ -40,10 +41,10 @@
     }
 
     void readDirectory(InputStream is) throws IOException {
-        readDirectory(is instanceof ZipDataInputStream ? (ZipDataInputStream) is : new ZipDataInputStream(is));
+        readDirectory(is instanceof ZipDataInputStream ? (ZipDataInputStream) is : is instanceof BufferedInputStream ? new ZipDataInputStream(is) : new ZipDataInputStream(new BufferedInputStream(is)));
     }
 
-    void readDirectory(ZipDataInputStream is) throws IOException {
+    private void readDirectory(ZipDataInputStream is) throws IOException {
         final List<ZipEntry> allEntries = this.allEntries;
         final Map<String, ZipEntry> entryMap = this.entryMap;
         try {




More information about the jboss-svn-commits mailing list