in src/main/java/com/microsoft/azure/datalake/store/ADLFileInputStream.java [81:111]
public int read(byte[] b, int off, int len) throws IOException {
if (streamClosed) throw new IOException("attempting to read from a closed stream");
if (b == null) {
throw new IllegalArgumentException("null byte array passed in to read() method");
}
if (off < 0 || len < 0 || len > b.length - off) {
throw new IndexOutOfBoundsException();
}
if (log.isTraceEnabled()) {
log.trace("ADLFileInputStream.read(b,off,{}) at offset {} using client {} from file {}", len, getPos(), client.getClientId(), filename);
}
if (len == 0) {
return 0;
}
//If buffer is empty, then fill the buffer. If EOF, then return -1
if (bCursor == limit)
{
if (readFromService() < 0) return -1;
}
//If there is anything in the buffer, then return lesser of (requested bytes) and (bytes in buffer)
//(bytes returned may be less than requested)
int bytesRemaining = limit - bCursor;
int bytesToRead = Math.min(len, bytesRemaining);
System.arraycopy(buffer, bCursor, b, off, bytesToRead);
bCursor += bytesToRead;
return bytesToRead;
}