Home | History | Annotate | Download | only in rangecoder
      1 /*
      2  * RangeDecoderFromStream
      3  *
      4  * Authors: Lasse Collin <lasse.collin (at) tukaani.org>
      5  *          Igor Pavlov <http://7-zip.org/>
      6  *
      7  * This file has been put into the public domain.
      8  * You can do whatever you want with this file.
      9  */
     10 
     11 package org.tukaani.xz.rangecoder;
     12 
     13 import java.io.InputStream;
     14 import java.io.DataInputStream;
     15 import java.io.IOException;
     16 import org.tukaani.xz.CorruptedInputException;
     17 
     18 public final class RangeDecoderFromStream extends RangeDecoder {
     19     private final DataInputStream inData;
     20 
     21     public RangeDecoderFromStream(InputStream in) throws IOException {
     22         inData = new DataInputStream(in);
     23 
     24         if (inData.readUnsignedByte() != 0x00)
     25             throw new CorruptedInputException();
     26 
     27         code = inData.readInt();
     28         range = 0xFFFFFFFF;
     29     }
     30 
     31     public boolean isFinished() {
     32         return code == 0;
     33     }
     34 
     35     public void normalize() throws IOException {
     36         if ((range & TOP_MASK) == 0) {
     37             code = (code << SHIFT_BITS) | inData.readUnsignedByte();
     38             range <<= SHIFT_BITS;
     39         }
     40     }
     41 }
     42