2015-10-17 3 views
-3

с помощью Sam-tools API Java, как я получаю seq. между началом и концом я пишу следующий метод, который выдает исключение. этот метод пишет, чтобы получить последовательность из файла.Java: что такое BufferUnderflow Exceptio При использовании JavaTools Samtools для получения отчуждения String с Spicific postion

метод здесь идет

private static List<SAMRecord> scan(String chromosome, int start, int end) throws IOException { 
    List<SAMRecord> records = new ArrayList<SAMRecord>(); 
    CloseableIterator<SAMRecord> iter = null; 
    try { 
     iter = inputSam.query(chromosome, start, (start+70), containsbamRecord); 
System.out.println("herer : Floe"); 
     SAMRecord s=iter.next(); 
     System.out.println("Value Of Start : "+start+"\t"+"VAlue of End : "+(start+70)+"Value Of iter : "+s.getSAMString()); 

     while (iter.hasNext()) { 
     SAMRecord rec = iter.next(); 
      //System.out.println("Value Of Start : "+start+"\t"+"VAlue of End : "+end+"Value Of iter : "+rec.get); 

     records.add(rec); 
     } 
     return records; 
    } catch (Exception e) { 
     throw new IOException(e); 
    } finally { 
     if (iter != null) 
     iter.close(); 
    } 
    } 

Это Трассировка стека происходит исключение

java.io.IOException: java.nio.BufferUnderflowException 
    at WrapperMain.scan(WrapperMain.java:99) 
    at WrapperMain.getDataforPosition(WrapperMain.java:119) 
    at TzurLookupVariant.main(TzurLookupVariant.java:145) 
Caused by: java.nio.BufferUnderflowException 
    at java.nio.Buffer.nextGetIndex(Buffer.java:506) 
    at java.nio.DirectByteBuffer.getInt(DirectByteBuffer.java:677) 
    at net.sf.samtools.AbstractBAMFileIndex$MemoryMappedFileBuffer.readInteger(AbstractBAMFileIndex.java:455) 
    at net.sf.samtools.AbstractBAMFileIndex.readInteger(AbstractBAMFileIndex.java:406) 
    at net.sf.samtools.AbstractBAMFileIndex.query(AbstractBAMFileIndex.java:266) 
    at net.sf.samtools.DiskBasedBAMFileIndex.getSpanOverlapping(DiskBasedBAMFileIndex.java:60) 
    at net.sf.samtools.BAMFileReader.createIndexIterator(BAMFileReader.java:719) 
    at net.sf.samtools.BAMFileReader.query(BAMFileReader.java:369) 
    at net.sf.samtools.SAMFileReader.query(SAMFileReader.java:381) 
    at WrapperMain.scan(WrapperMain.java:86) 
    ... 2 more 
java.lang.NullPointerException 
    at WrapperMain.getDataPoint(WrapperMain.java:199) 
    at WrapperMain.getDataforPosition(WrapperMain.java:129) 
    at TzurLookupVariant.main(TzurLookupVariant.java:145) 
+0

Пожалуйста, добавьте фрагмент кода, чтобы помочь нам понять контекст исключения. Кроме того, обязательное чтение: http://stackoverflow.com/help/how-to-ask – MigDus

+0

'алгоритм правильный, он работает правильно', как это верно, если оно дает вам это исключение? Отправьте свой код, чтобы мы могли видеть, что с ним не так. –

ответ

1

документация Javadoc для BufferUnderflowException говорит:

«Неконтролируемое исключение, если относительная операция получения достигает предела исходного буфера».

Таким образом, общим решением было бы избежать вызова get в буфере, в котором больше нет данных.

Мы не можем быть более конкретными, чем это, не видя соответствующие части вашего кода.


Вы говорите:

... Алгоритм правильно ...

Это, вероятно, не так, по крайней мере, на каком-то уровне.

... Когда я создаю новый класс и вношу некоторые изменения, он запускает мне исключение, и теперь я удаляю созданный класс, но все же он бросает одно и то же исключение .... Почему ????

Скорее всего, что-то < < изменилось. Но также возможно, что основная причина вашей проблемы заключалась в том, чтобы начать с того, и что-то не детерминированное в том, как работает ваше приложение.