LISTING 1: BitInputStream.java
   
   // $Id$
   
   import java.io.*;
   
   public class BitInputStream
   {
     private InputStream in;
     private int buffer;
     private int nextBit = 8;
   
     public BitInputStream( InputStream in ) {
       this.in = in;
     }
   
     synchronized public int readBit() throws IOException {
       if (in == null)
         throw new IOException( "Already closed" );
   
       if (nextBit==8) {
         buffer = in.read();
   
         if (buffer==-1)
           throw new EOFException();
   
         nextBit = 0;
       }
   
       int bit = buffer & (1<<nextBit);
       nextBit++;
   
       bit = bit == 0 ? 0 : 1;
   
       return bit;
     }
   
     public void close() throws IOException {
       in.close();
       in = null;
     }
   }