Author: bodewig
Date: Sat Aug 17 19:46:10 2013
New Revision: 1515039

URL: http://svn.apache.org/r1515039
Log:
count bytes read in ArjArchiveInputStream

Modified:
    
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/arj/ArjArchiveInputStream.java

Modified: 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/arj/ArjArchiveInputStream.java
URL: 
http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/arj/ArjArchiveInputStream.java?rev=1515039&r1=1515038&r2=1515039&view=diff
==============================================================================
--- 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/arj/ArjArchiveInputStream.java
 (original)
+++ 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/arj/ArjArchiveInputStream.java
 Sat Aug 17 19:46:10 2013
@@ -95,10 +95,23 @@ public class ArjArchiveInputStream exten
         System.out.println(message);
     }
 
-    private static int read16(final DataInputStream in) throws IOException {
+    private int read8(final DataInputStream in) throws IOException {
+        int value = in.readUnsignedByte();
+        count(1);
+        return value;
+    }
+
+    private int read16(final DataInputStream in) throws IOException {
         final int value = in.readUnsignedShort();
+        count(2);
         return Integer.reverseBytes(value) >>> 16;
     }
+
+    private int read32(final DataInputStream in) throws IOException {
+        final int value = in.readInt();
+        count(4);
+        return Integer.reverseBytes(value);
+    }
     
     private String readString(final DataInputStream in) throws IOException {
         final ByteArrayOutputStream buffer = new ByteArrayOutputStream();
@@ -109,15 +122,21 @@ public class ArjArchiveInputStream exten
         return new String(buffer.toByteArray(), charset);
     }
     
+    private void readFully(final DataInputStream in, byte[] b)
+        throws IOException {
+        in.readFully(b);
+        count(b.length);
+    }
+    
     private byte[] readHeader() throws IOException {
         boolean found = false;
         byte[] basicHeaderBytes = null;
         do {
             int first = 0;
-            int second = in.readUnsignedByte();
+            int second = read8(in);
             do {
                 first = second;
-                second = in.readUnsignedByte();
+                second = read8(in);
             } while (first != ARJ_MAGIC_1 && second != ARJ_MAGIC_2);
             final int basicHeaderSize = read16(in);
             if (basicHeaderSize == 0) {
@@ -126,8 +145,8 @@ public class ArjArchiveInputStream exten
             }
             if (basicHeaderSize <= 2600) {
                 basicHeaderBytes = new byte[basicHeaderSize];
-                in.readFully(basicHeaderBytes);
-                final int basicHeaderCrc32 = 
Integer.reverseBytes(in.readInt());
+                readFully(in, basicHeaderBytes);
+                final int basicHeaderCrc32 = read32(in);
                 final CRC32 crc32 = new CRC32();
                 crc32.update(basicHeaderBytes);
                 if (basicHeaderCrc32 == (int)crc32.getValue()) {
@@ -160,12 +179,13 @@ public class ArjArchiveInputStream exten
         mainHeader.securityVersion = firstHeader.readUnsignedByte();
         mainHeader.fileType = firstHeader.readUnsignedByte();
         mainHeader.reserved = firstHeader.readUnsignedByte();
-        mainHeader.dateTimeCreated = 
Integer.reverseBytes(firstHeader.readInt());
-        mainHeader.dateTimeModified = 
Integer.reverseBytes(firstHeader.readInt());
-        mainHeader.archiveSize = 0xffffFFFFL & 
Integer.reverseBytes(firstHeader.readInt());
-        mainHeader.securityEnvelopeFilePosition = 
Integer.reverseBytes(firstHeader.readInt());
+        mainHeader.dateTimeCreated = read32(firstHeader);
+        mainHeader.dateTimeModified = read32(firstHeader);
+        mainHeader.archiveSize = 0xffffFFFFL & read32(firstHeader);
+        mainHeader.securityEnvelopeFilePosition = read32(firstHeader);
         mainHeader.fileSpecPosition = read16(firstHeader);
         mainHeader.securityEnvelopeLength = read16(firstHeader);
+        pushedBackBytes(20); // count has already counted them via readFully
         mainHeader.encryptionVersion = firstHeader.readUnsignedByte();
         mainHeader.lastChapter = firstHeader.readUnsignedByte();
         
@@ -183,8 +203,8 @@ public class ArjArchiveInputStream exten
         final  int extendedHeaderSize = read16(in);
         if (extendedHeaderSize > 0) {
             mainHeader.extendedHeaderBytes = new byte[extendedHeaderSize];
-            in.readFully(mainHeader.extendedHeaderBytes);
-            final int extendedHeaderCrc32 = Integer.reverseBytes(in.readInt());
+            readFully(in, mainHeader.extendedHeaderBytes);
+            final int extendedHeaderCrc32 = read32(in);
             final CRC32 crc32 = new CRC32();
             crc32.update(mainHeader.extendedHeaderBytes);
             if (extendedHeaderCrc32 != (int)crc32.getValue()) {
@@ -221,20 +241,22 @@ public class ArjArchiveInputStream exten
         localFileHeader.method = firstHeader.readUnsignedByte();
         localFileHeader.fileType = firstHeader.readUnsignedByte();
         localFileHeader.reserved = firstHeader.readUnsignedByte();
-        localFileHeader.dateTimeModified = 
Integer.reverseBytes(firstHeader.readInt());
-        localFileHeader.compressedSize = 0xffffFFFFL & 
Integer.reverseBytes(firstHeader.readInt());
-        localFileHeader.originalSize = 0xffffFFFFL & 
Integer.reverseBytes(firstHeader.readInt());
-        localFileHeader.originalCrc32 = 
Integer.reverseBytes(firstHeader.readInt());
+        localFileHeader.dateTimeModified = read32(firstHeader);
+        localFileHeader.compressedSize = 0xffffFFFFL & read32(firstHeader);
+        localFileHeader.originalSize = 0xffffFFFFL & read32(firstHeader);
+        localFileHeader.originalCrc32 = read32(firstHeader);
         localFileHeader.fileSpecPosition = read16(firstHeader);
         localFileHeader.fileAccessMode = read16(firstHeader);
+        pushedBackBytes(20);
         localFileHeader.firstChapter = firstHeader.readUnsignedByte();
         localFileHeader.lastChapter = firstHeader.readUnsignedByte();
         
         try {
-            localFileHeader.extendedFilePosition = 
Integer.reverseBytes(firstHeader.readInt());
-            localFileHeader.dateTimeAccessed = 
Integer.reverseBytes(firstHeader.readInt());
-            localFileHeader.dateTimeCreated = 
Integer.reverseBytes(firstHeader.readInt());
-            localFileHeader.originalSizeEvenForVolumes = 
Integer.reverseBytes(firstHeader.readInt());
+            localFileHeader.extendedFilePosition = read32(firstHeader);
+            localFileHeader.dateTimeAccessed = read32(firstHeader);
+            localFileHeader.dateTimeCreated = read32(firstHeader);
+            localFileHeader.originalSizeEvenForVolumes = read32(firstHeader);
+            pushedBackBytes(16);
         } catch (EOFException eof) {
         }
         
@@ -245,8 +267,8 @@ public class ArjArchiveInputStream exten
         int extendedHeaderSize;
         while ((extendedHeaderSize = read16(in)) > 0) {
             final byte[] extendedHeaderBytes = new byte[extendedHeaderSize];
-            in.readFully(extendedHeaderBytes);
-            final int extendedHeaderCrc32 = Integer.reverseBytes(in.readInt());
+            readFully(in, extendedHeaderBytes);
+            final int extendedHeaderCrc32 = read32(in);
             final CRC32 crc32 = new CRC32();
             crc32.update(extendedHeaderBytes);
             if (extendedHeaderCrc32 != (int)crc32.getValue()) {
@@ -306,14 +328,6 @@ public class ArjArchiveInputStream exten
     }
     
     @Override
-    public int read() throws IOException {
-        if (currentLocalFileHeader.method != LocalFileHeader.Methods.STORED) {
-            throw new IOException("Unsupported compression method " + 
currentLocalFileHeader.method);
-        }
-        return currentInputStream.read();
-    }
-    
-    @Override
     public int read(final byte[] b, final int off, final int len) throws 
IOException {
         if (currentLocalFileHeader.method != LocalFileHeader.Methods.STORED) {
             throw new IOException("Unsupported compression method " + 
currentLocalFileHeader.method);


Reply via email to