Package mwt.wow.mpq

Source Code of mwt.wow.mpq.BZip2Reader

package mwt.wow.mpq;

import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;

import org.apache.tools.bzip2.CBZip2InputStream;

class BZip2Reader extends Reader {

  private CBZip2InputStream is;

  public BZip2Reader(final Reader reader, final int compressedLength) throws IOException {
    int cB = reader.readInt8();
    int cZ = reader.readInt8();
    if (cB != 'B' || cZ != 'Z') {
      throw new IOException("No BZip2 stream found");
    }
    is = new CBZip2InputStream(new InputStream() {

      int remaining = compressedLength - 2;
     
      @Override
      public int read() throws IOException {
        if (remaining <= 0) {
          return -1;
        }
        try {
          remaining--;
          return reader.readInt8();
        } catch (EOFException e) {
          return -1;
        }
      }

    });
  }

  @Override
  protected int readByte() throws IOException {
    if (is == null) {
      return -1;
    }
    int c = is.read();
    if (c == -1) {
      close();
    }
    return c;
  }

  @Override
  public void seek(long position) throws IOException {
    throw new IOException("Cannot seek in a compressed stream");
  }

  @Override
  public void close() throws IOException {
    if (is != null) {
      is.close();
      is = null;
    }
  }

}
TOP

Related Classes of mwt.wow.mpq.BZip2Reader

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.