package com.sleepycat.je.log; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import com.sleepycat.je.DatabaseException; import com.sleepycat.je.dbi.EnvironmentImpl; import de.ovgu.cide.jakutil.*; /** * FileSource is used as a channel to a log file when faulting in objects * from the log. */ class FileSource implements LogSource { private RandomAccessFile file; private int readBufferSize; private FileManager fileManager; FileSource( RandomAccessFile file, int readBufferSize, FileManager fileManager){ this.file=file; this.readBufferSize=readBufferSize; this.fileManager=fileManager; } /** * @see LogSource#release */ public void release() throws DatabaseException { } /** * @see LogSource#getBytes */ public ByteBuffer getBytes( long fileOffset) throws IOException { ByteBuffer destBuf=ByteBuffer.allocate(readBufferSize); fileManager.readFromFile(file,destBuf,fileOffset); assert EnvironmentImpl.maybeForceYield(); destBuf.flip(); return destBuf; } /** * @see LogSource#getBytes */ public ByteBuffer getBytes( long fileOffset, int numBytes) throws IOException { ByteBuffer destBuf=ByteBuffer.allocate(numBytes); fileManager.readFromFile(file,destBuf,fileOffset); assert EnvironmentImpl.maybeForceYield(); destBuf.flip(); assert destBuf.remaining() >= numBytes : "remaining=" + destBuf.remaining() + " numBytes="+ numBytes; return destBuf; } }