| /* |
| * RangeDecoderFromStream |
| * |
| * Authors: Lasse Collin <lasse.collin@tukaani.org> |
| * Igor Pavlov <http://7-zip.org/> |
| * |
| * This file has been put into the public domain. |
| * You can do whatever you want with this file. |
| */ |
| |
| package org.tukaani.xz.rangecoder; |
| |
| import java.io.InputStream; |
| import java.io.DataInputStream; |
| import java.io.IOException; |
| import org.tukaani.xz.CorruptedInputException; |
| |
| public final class RangeDecoderFromStream extends RangeDecoder { |
| private final DataInputStream inData; |
| |
| public RangeDecoderFromStream(InputStream in) throws IOException { |
| inData = new DataInputStream(in); |
| |
| if (inData.readUnsignedByte() != 0x00) |
| throw new CorruptedInputException(); |
| |
| code = inData.readInt(); |
| range = 0xFFFFFFFF; |
| } |
| |
| public boolean isFinished() { |
| return code == 0; |
| } |
| |
| public void normalize() throws IOException { |
| if ((range & TOP_MASK) == 0) { |
| code = (code << SHIFT_BITS) | inData.readUnsignedByte(); |
| range <<= SHIFT_BITS; |
| } |
| } |
| } |