commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bode...@apache.org
Subject svn commit: r1153460 - /commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java
Date Wed, 03 Aug 2011 12:06:04 GMT
Author: bodewig
Date: Wed Aug  3 12:06:03 2011
New Revision: 1153460

URL: http://svn.apache.org/viewvc?rev=1153460&view=rev
Log:
get rid of Deflater#getBytesWritten by self-counting

Modified:
    commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java

Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java?rev=1153460&r1=1153459&r2=1153460&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java
(original)
+++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java
Wed Aug  3 12:06:03 2011
@@ -374,27 +374,27 @@ public class ZipArchiveOutputStream exte
             throw new IOException("No current entry to close");
         }
 
-        long realCrc = crc.getValue();
-        crc.reset();
-
         if (entry.entry.getMethod() == DEFLATED) {
             def.finish();
             while (!def.finished()) {
                 deflate();
             }
+        }
+
+        long bytesWritten = written - entry.dataStart;
+        long realCrc = crc.getValue();
+        crc.reset();
 
+        if (entry.entry.getMethod() == DEFLATED) {
             /* It turns out def.getBytesRead() returns wrong values if
-             * the size exceeds 4 GB - no idea whether one can trust
-             * def.getBytesWritten()
+             * the size exceeds 4 GB on Java < Java7
             entry.entry.setSize(def.getBytesRead());
             */
             entry.entry.setSize(entry.bytesRead);
-            entry.entry.setCompressedSize(def.getBytesWritten());
+            entry.entry.setCompressedSize(bytesWritten);
             entry.entry.setCrc(realCrc);
 
             def.reset();
-
-            written += entry.entry.getCompressedSize();
         } else if (raf == null) {
             if (entry.entry.getCrc() != realCrc) {
                 throw new ZipException("bad CRC checksum for entry "
@@ -404,18 +404,16 @@ public class ZipArchiveOutputStream exte
                                        + Long.toHexString(realCrc));
             }
 
-            if (entry.entry.getSize() != written - entry.dataStart) {
+            if (entry.entry.getSize() != bytesWritten) {
                 throw new ZipException("bad size for entry "
                                        + entry.entry.getName() + ": "
                                        + entry.entry.getSize()
                                        + " instead of "
-                                       + (written - entry.dataStart));
+                                       + bytesWritten);
             }
         } else { /* method is STORED and we used RandomAccessFile */
-            long size = written - entry.dataStart;
-
-            entry.entry.setSize(size);
-            entry.entry.setCompressedSize(size);
+            entry.entry.setSize(bytesWritten);
+            entry.entry.setCompressedSize(bytesWritten);
             entry.entry.setCrc(realCrc);
         }
 
@@ -698,6 +696,7 @@ public class ZipArchiveOutputStream exte
         int len = def.deflate(buf, 0, buf.length);
         if (len > 0) {
             writeOut(buf, 0, len);
+            written += len;
         }
     }
 



Mime
View raw message