content: package com.zzzmode.apkeditor.axmleditor.decode;
  
  import java.io.*;
  
  /**
   * @author Dmitry Skiba
   *
   * Simple helper class that allows reading of integers.
   */
  public final class IntReader implements Closeable {
  	    
  	    public IntReader() {
  	    }
  	    public IntReader(InputStream stream,boolean bigEndian) {
  	            reset(stream,bigEndian);
  	    }
  	    
  	    public final void reset(InputStream stream,boolean bigEndian) {
  	            m_stream= new BufferedInputStream(stream);
  	            m_bigEndian=bigEndian;
  	            m_position=0;           
  	    }
  	
  	    public final void close() {
  	            if (m_stream==null) {
  	                    return;
  	            }
  	            try {
  	                    m_stream.close();
  	            }
  	            catch (IOException e) {
  	            }
  	            reset(null,false);
  	    }
  	    
  	    public final InputStream getStream() {
  	            return m_stream;
  	    }
  	    
  	    public final boolean isBigEndian() {
  	            return m_bigEndian;
  	    }
  	    public final void setBigEndian(boolean bigEndian) {
  	            m_bigEndian=bigEndian;
  	    }
  	
  	    public final int readByte() throws IOException {
  	            return readInt(1);
  	    }
  	    public final int readShort() throws IOException {
  	            return readInt(2);
  	    }
  	    public final int readInt() throws IOException {
  	            return readInt(4);
  	    }
  	    
  	    public final int readInt(int length) throws IOException {
  	            if (length<0 || length>4) {
  	                    throw new IllegalArgumentException();
  	            }
  	            int result=0;
  	            if (m_bigEndian) {
  	                    for (int i=(length-1)*8;i>=0;i-=8) {
  	                            int b=m_stream.read();
  	                            if (b==-1) {
  	                                    throw new EOFException();
  	                            }
  	                            m_position+=1;
  	                            result|=(b<<i);
  	                    }
  	            } else {
  	                    length*=8;
  	                    for (int i=0;i!=length;i+=8) {
  	                            int b=m_stream.read();
  	                            if (b==-1) {
  	                                    throw new EOFException();
  	                            }
  	                            m_position+=1;
  	                            result|=(b<<i);
  	                    }
  	            }
  	            return result;            
  	    }
  	    
  	    public final int[] readIntArray(int length) throws IOException {
  	            int[] array=new int[length];
  	            readIntArray(array,0,length);
  	            return array;
  	    }
  	   
  	    
  	    public final void readIntArray(int[] array,int offset,int length) throws IOException {
  	            for (;length>0;length-=1) {
  	                    array[offset++]=readInt();
  	            }
  	    }
  	    
  	    public final byte[] readByteArray(int length) throws IOException {
  	            byte[] array=new byte[length];
  	            int read=m_stream.read(array);
  	            m_position+=read;
  	            if (read!=length) {
  	                    throw new EOFException();
  	            }
  	            return array;
  	    }
  	    
  	    public final void skip(int bytes) throws IOException {
  	            if (bytes<=0) {
  	                    return;
  	            }
  	            long skipped=m_stream.skip(bytes);
  	            m_position+=skipped;
  	            if (skipped!=bytes) {
  	                    throw new EOFException();
  	            }
  	    }
  	    
  	    public final void skipInt() throws IOException {
  	            skip(4);
  	    }
  	    
  	    public final int available() throws IOException {
  	            return m_stream.available();
  	    }
  	    
  	    public final int getPosition() {
  	            return m_position;
  	    }
      
      /////////////////////////////////// data
  
  	private InputStream m_stream;
  	private boolean m_bigEndian;
  	private int m_position;
  }
  