package org.fastcatsearch.ir.io; import java.io.File; import java.io.IOException; import org.apache.lucene.util.BytesRef; import org.fastcatsearch.ir.common.IndexFileNames; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class FixedDataInput implements SequencialDataInput { private static Logger logger = LoggerFactory.getLogger(FixedDataInput.class); private IndexInput dataInput; private int dataSize; private FixedDataInput(){ } public FixedDataInput(File dir, String fileName, int dataSize) throws IOException{ File dataFile = new File(dir, fileName); dataInput = new BufferedFileInput(dataFile); this.dataSize = dataSize; } //범위체크하지 않음. @Override public boolean read(BytesRef bytesRef, long sequence) throws IOException{ dataInput.seek(dataSize * sequence); if(bytesRef.bytes.length < dataSize){ bytesRef.bytes = new byte[dataSize]; } dataInput.readBytes(bytesRef.bytes, 0, dataSize); // String str = ""; // for (int i = 0; i < dataSize; i++) { // str += (bytesRef.bytes[i] +","); // } // logger.debug("read fixed data [{}] seq[{}]", str, sequence); bytesRef.offset = 0; bytesRef.length = dataSize; return true; } @Override public void close() throws IOException{ dataInput.close(); } @Override public FixedDataInput clone(){ FixedDataInput input = new FixedDataInput(); input.dataInput = this.dataInput.clone(); input.dataSize = this.dataSize; return input; } }