content: package com.alimama.mdrill.buffer;
  
  import java.io.IOException;
  
  import org.apache.lucene.store.BufferedIndexInput;
  import org.apache.lucene.store.IndexInput;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
  
  public class SmallBufferedInput extends BufferedIndexInput {
  	public static Logger log = LoggerFactory
  			.getLogger(SmallBufferedInput.class);
  	private IndexInput in;
  	private boolean isOpen;
  	private boolean isClone;
  
  	public SmallBufferedInput(IndexInput input, int buffersize) {
  		super("SmallBufferedInput", buffersize);
  //		log.info("SmallBufferedInput:" + input.getClass().getName() + ","
  //				+ buffersize);
  		this.in = input;
  		this.isOpen = true;
  	}
  
  	@Override
  	protected void readInternal(byte[] b, int offset, int length)
  			throws IOException {
  		long position = getFilePointer();
  		synchronized (this.in) {
  			if(position!=this.in.getFilePointer())
  			{
  				this.in.seek(position);
  			}
  			this.in.readBytes(b, offset, length);
  		}
  	}
  
  	@Override
  	protected void seekInternal(long pos) throws IOException {
  
  	}
  
  	public Object clone() {
  		SmallBufferedInput clone = (SmallBufferedInput) super.clone();
  		clone.isClone = true;
  		return clone;
  	}
  
  	@Override
  	public void close() throws IOException {
  		if (!isClone) {
  			if (isOpen) {
  				in.close();
  				isOpen = false;
  			} else {
  				throw new IOException("Index file " + " already closed");
  			}
  		}
  
  	}
  
  	@Override
  	public long length() {
  		return in.length();
  	}
  
  }
  