/**
   * Retrieves the LDIF reader configured to read from the next LDIF file in the list.
   *
   * @return The reader that should be used to read the LDIF data, or <CODE>null</CODE> if there are
   *     no more files to read.
   * @throws IOException If a problem occurs while obtaining the reader.
   */
  public BufferedReader nextReader() throws IOException {
    if (ldifFileIterator == null || !ldifFileIterator.hasNext()) {
      return null;
    }

    reader.close();

    InputStream inputStream = ldifInputStream = new FileInputStream(ldifFileIterator.next());

    if (isEncrypted) {
      // FIXME -- Add support for encryption with a cipher input stream.
    }

    if (isCompressed) {
      inputStream = new GZIPInputStream(inputStream);
    }

    reader = new BufferedReader(new InputStreamReader(inputStream), bufferSize);
    return reader;
  }
  /**
   * Retrieves the reader that should be used to read the LDIF data. Note that if the LDIF file is
   * compressed and/or encrypted, then that must be indicated before this method is called for the
   * first time.
   *
   * @return The reader that should be used to read the LDIF data.
   * @throws IOException If a problem occurs while obtaining the reader.
   */
  public BufferedReader getReader() throws IOException {
    if (reader == null) {
      InputStream inputStream;
      if (ldifInputStream != null) {
        inputStream = ldifInputStream;
      } else {
        inputStream = ldifInputStream = new FileInputStream(ldifFileIterator.next());
      }

      if (isEncrypted) {
        // FIXME -- Add support for encryption with a cipher input
        //          stream.
      }

      if (isCompressed) {
        inputStream = new GZIPInputStream(inputStream);
      }

      reader = new BufferedReader(new InputStreamReader(inputStream), bufferSize);
    }

    return reader;
  }