public void decompress(
        LodEntry lodentry,
        byte[] data,
        OutputStream outputstream,
        ExtractionObserver extractionobserver,
        boolean bool)
    {
        allowCancel = bool;
        cancelSignalled = false;

        // IMPLEMENT: dump the bytestream
        ByteArrayInputStream in = new ByteArrayInputStream(data);

        try
        {
            if (extractionobserver != null)
                extractionobserver.extractionStarted(lodentry.getName());
			int dataLeftToRead = data.length;
            if (dataLeftToRead > 0)
            {
				while (dataLeftToRead > 0)
				{
					int i = in.read();
					outputstream.write(i);
					--dataLeftToRead;
					
					if (bool)
					{
						if (cancelSignalled && extractionobserver != null)
							extractionobserver.extractionCancelled(lodentry.getName());
					}
				}
            }
            outputstream.flush();
            outputstream.close();
        }
        catch (Exception exception)
        {
            if (extractionobserver != null)
                extractionobserver.exceptionCaught(exception);
        }
        if (extractionobserver != null)
            extractionobserver.extractionFinished(lodentry.getName());
    }