@Override public void advancePeekPosition(int length) throws IOException, InterruptedException { ensureSpaceForPeek(length); int peekBytes = Math.min(peekBufferLength - peekBufferPosition, length); int fillBytes = length - peekBytes; int remaining = fillBytes; int writePosition = peekBufferLength; while (remaining > 0) { if (Thread.interrupted()) { throw new InterruptedException(); } int bytesRead = dataSource.read(peekBuffer, writePosition, remaining); if (bytesRead == C.RESULT_END_OF_INPUT) { throw new EOFException(); } remaining -= bytesRead; writePosition += bytesRead; } peekBufferPosition += length; peekBufferLength += fillBytes; }
@Override public void peekFully(byte[] target, int offset, int length) throws IOException, InterruptedException { ensureSpaceForPeek(length); int peekBytes = Math.min(peekBufferLength - peekBufferPosition, length); System.arraycopy(peekBuffer, peekBufferPosition, target, offset, peekBytes); offset += peekBytes; int fillBytes = length - peekBytes; int remaining = fillBytes; int writePosition = peekBufferLength; while (remaining > 0) { if (Thread.interrupted()) { throw new InterruptedException(); } int bytesRead = dataSource.read(peekBuffer, writePosition, remaining); if (bytesRead == C.RESULT_END_OF_INPUT) { throw new EOFException(); } System.arraycopy(peekBuffer, writePosition, target, offset, bytesRead); remaining -= bytesRead; writePosition += bytesRead; offset += bytesRead; } peekBufferPosition += length; peekBufferLength += fillBytes; }