void readIntoDirectly(byte[] byteArray, long position, int length) throws IOException {
    validateReadRange(position, length);
    // TODO: Try to avoid opening file on every opeartion.
    try (DirectRandomAccessFile directFile = new DirectRandomAccessFile(file, "r", 2 * 1024 * 1024)) {
      directFile.seek(position);
      directFile.read(byteArray, 0, length);
    }
  }
@param byteArray The buffer into which the data needs to be written.
@param position The source's position to start the read.
@param length The length of data in bytes to read.
@throws IOException if data could not be written to the file because of I/O errors.
@throws IndexOutOfBoundsException if {@code position} < header size or >= {@link #sizeInBytes()} or if
{@code buffer} size is greater than the data available for read.
ambry-store/src/main/java/com/github/ambry/store/LogSegment.java