You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by bo...@apache.org on 2014/11/14 06:19:51 UTC

svn commit: r1639572 - /commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/BitStream.java

Author: bodewig
Date: Fri Nov 14 05:19:51 2014
New Revision: 1639572

URL: http://svn.apache.org/r1639572
Log:
base BitStream on BitInputStream

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

Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/BitStream.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/BitStream.java?rev=1639572&r1=1639571&r2=1639572&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/BitStream.java (original)
+++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/BitStream.java Fri Nov 14 05:19:51 2014
@@ -21,6 +21,8 @@ package org.apache.commons.compress.arch
 
 import java.io.IOException;
 import java.io.InputStream;
+import org.apache.commons.compress.utils.BitInputStream;
+import java.nio.ByteOrder;
 
 /**
  * Iterates over the bits of an InputStream. For each byte the bits
@@ -28,48 +30,10 @@ import java.io.InputStream;
  *
  * @since 1.7
  */
-class BitStream {
-
-    private final InputStream in;
-
-    /** The bits read from the underlying stream but not consumed by nextBits() */
-    private long bitCache;
-
-    /** The number of bits available in the bit cache */
-    private int bitCacheSize;
-
-    /** Bit masks for extracting the right most bits from a byte */
-    private static final int[] MASKS = new int[]{ 
-            0x00, // 00000000
-            0x01, // 00000001
-            0x03, // 00000011
-            0x07, // 00000111
-            0x0F, // 00001111
-            0x1F, // 00011111
-            0x3F, // 00111111
-            0x7F, // 01111111
-            0xFF  // 11111111
-    };
+class BitStream extends BitInputStream {
 
     BitStream(InputStream in) {
-        this.in = in;
-    }
-
-    private boolean fillCache() throws IOException {
-        boolean filled = false;
-        
-        while (bitCacheSize <= 56) {
-            long nextByte = in.read();
-            if (nextByte == -1) {
-                break;
-            }
-            
-            filled = true;
-            bitCache = bitCache | (nextByte << bitCacheSize);
-            bitCacheSize += 8;
-        }
-
-        return filled;
+        super(in, ByteOrder.LITTLE_ENDIAN);
     }
 
     /**
@@ -78,16 +42,7 @@ class BitStream {
      * @return The next bit (0 or 1) or -1 if the end of the stream has been reached
      */
     int nextBit() throws IOException {
-        if (bitCacheSize == 0 && !fillCache()) {
-            return -1;
-        }
-
-        int bit = (int) (bitCache & 1); // extract the right most bit
-
-        bitCache = (bitCache >>> 1); // shift the remaning bits to the right
-        bitCacheSize--;
-
-        return bit;
+        return readBits(1);
     }
 
     /**
@@ -97,19 +52,10 @@ class BitStream {
      * @return The value formed by the n bits, or -1 if the end of the stream has been reached
      */
     int nextBits(final int n) throws IOException {
-        if (bitCacheSize < n && !fillCache()) {
-            return -1;
-        }
-
-        final int bits = (int) (bitCache & MASKS[n]); // extract the right most bits
-
-        bitCache = (bitCache >>> n); // shift the remaning bits to the right
-        bitCacheSize = bitCacheSize - n;
-
-        return bits;
+        return readBits(n);
     }
 
     int nextByte() throws IOException {
-        return nextBits(8);
+        return readBits(8);
     }
 }