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);