Index: lucene/src/java/org/apache/lucene/util/BitVector.java
===================================================================
--- lucene/src/java/org/apache/lucene/util/BitVector.java	(revision 1144270)
+++ lucene/src/java/org/apache/lucene/util/BitVector.java	(working copy)
@@ -280,7 +280,7 @@
     int numCleared = size()-count();
     int m = bits.length;
     for (int i=0; i<m && numCleared>0; i++) {
-      if (bits[i]!=0xff) {
+      if ((0xff & bits[i]) != 0xff) {
         output.writeVInt(i-last);
         output.writeByte(bits[i]);
         last = i;
Index: lucene/src/test/org/apache/lucene/util/TestBitVector.java
===================================================================
--- lucene/src/test/org/apache/lucene/util/TestBitVector.java	(revision 1144270)
+++ lucene/src/test/org/apache/lucene/util/TestBitVector.java	(working copy)
@@ -153,7 +153,7 @@
             assertTrue(doCompare(bv,compare));
         }
     }
-
+    
     /**
      * Test r/w when size/count cause switching between bit-set and d-gaps file formats.  
      */
@@ -165,6 +165,26 @@
       doTestDgaps(10000,40,43);
       doTestDgaps(100000,415,418);
       doTestDgaps(1000000,3123,3126);
+      // now exercise skipping of fully populated byte in the bitset (they are omitted if bitset is sparse)
+      MockDirectoryWrapper d = new  MockDirectoryWrapper(random, new RAMDirectory());
+      d.setPreventDoubleWrite(false);
+      BitVector bv = new BitVector(10000);
+      bv.set(0);
+      for (int i = 8; i < 16; i++) {
+        bv.set(i);
+      } // make sure we have once byte full of set bits
+      for (int i = 32; i < 40; i++) {
+        bv.set(i);
+      } // get a second byte full of set bits
+      // add some more bits here 
+      for (int i = 40; i < 10000; i++) {
+        if (random.nextInt(1000) == 0) {
+          bv.set(i);
+        }
+      }
+      bv.write(d, "TESTBV", newIOContext(random));
+      BitVector compare = new BitVector(d, "TESTBV", newIOContext(random));
+      assertTrue(doCompare(bv,compare));
     }
     
     private void doTestDgaps(int size, int count1, int count2) throws IOException {
