code: public BitReader openReader() throws BitStreamException {
  		try {
  			switch(mode) {
  			case MEMORY : return new ByteArrayBitReader(getBytes());
  			case STREAM : return new InputStreamBitReader(new BufferedInputStream(new FileInputStream(file), bufferSize));
  			case CHANNEL: return new FileChannelBitReader(new RandomAccessFile(file, "r").getChannel(), ByteBuffer.allocateDirect(bufferSize));
  			default: throw new IllegalStateException("Unexpected mode: " + mode);
  			}
  		} catch (IOException e) {
  			throw new BitStreamException(e);
  		}
  	}
docs: Opens a reader over the bits of the file. The characteristics of the
  returned reader are determined by the {@link Mode} in which the factory
  was created.
  
  Any reader returned by this method SHOULD eventually be closed by passing
  it to the {@link #closeReader(BitReader)} method. Not doing so may risk
  leaking system resources.
  
  @return a new reader over the file
  @throws BitStreamException
  if the reader could not be opened, typically because the file
  could not be read