@Override public int read(ByteBuffer dst) throws IOException { requireOpen(); buffer.limit(0); wrapped.position(position); int read = wrapped.read(dst); if (read > 0) { position += read; } return read; }
@Override public SeekableSource position(long newPosition) throws IOException { requireArg(newPosition >= 0, "Cannot set position to a negative value"); if (newPosition != this.position) { long newBufPosition = newPosition - position + buffer.position(); if (newBufPosition >= 0 && newBufPosition < buffer.limit()) { buffer.position((int) newBufPosition); } else { buffer.limit(0); wrapped.position(newPosition); } this.position = Math.min(newPosition, size); } return this; }