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