package org.torrent.internal.io;
import java.io.IOException;
import java.nio.ByteBuffer;
import org.torrent.internal.io.FileMapper.Mapping;
import org.torrent.internal.util.Validator;
public class FileMappedReader implements DataReader {
private final FileMapper mapper;
private final FileReader reader;
public FileMappedReader(FileMapper mapper, FileReader reader) {
Validator.nonNull(mapper, reader);
this.mapper = mapper;
this.reader = reader;
}
@Override
public void read(ByteBuffer dst, long position) throws IOException {
for (Mapping m : mapper.map(position, dst.remaining())) {
dst.limit(dst.position() + m.getLength());
reader.read(m.getFile(), dst, m.getPosition());
}
}
}