package abra; import htsjdk.samtools.DefaultSAMRecordFactory; import htsjdk.samtools.SAMRecord; import htsjdk.samtools.SamInputResource; import htsjdk.samtools.SamReader; import htsjdk.samtools.SamReaderFactory; import htsjdk.samtools.ValidationStringency; import java.io.IOException; import java.io.InputStream; import java.util.Queue; public class ReadInputStreamRunnable implements Runnable { private static final int MAX_QUEUE_SIZE = 600000; private InputStream is; private Queue<SAMRecord> queue; public ReadInputStreamRunnable(InputStream is, Queue<SAMRecord> queue) { this.is = is; this.queue = queue; } public void run() { final SamReader reader = SamReaderFactory.make() .validationStringency(ValidationStringency.SILENT) .samRecordFactory(DefaultSAMRecordFactory.getInstance()) .open(SamInputResource.of(is)); for (SAMRecord read : reader) { while (queue.size() > MAX_QUEUE_SIZE) { // System.out.println("Queue too big"); try { Thread.sleep(100); } catch (InterruptedException e) { } } queue.add(read); } try { reader.close(); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } } }