public static void main(String[] args) throws IOException {

        //-------------- Test reading 1 MB file. --------------------
        StopWatch.start();
        BufferedInputStream inputStream= new BufferedInputStream(new FileInputStream(new File(DumpDataWriter.input1MB)));
        byte[] buffer= new byte[2048]; // 2KB
        while (inputStream.read(buffer)!=-1){} // 75 ms
        long duration = StopWatch.stop();
        System.out.println(duration);

        //-------------- Test reading 10 MB file. --------------------

        StopWatch.start();

        BufferedInputStream inputStream2 = new BufferedInputStream(new FileInputStream(new File(DumpDataWriter.input10MB)));
        byte[] buffer2= new byte[1024*1024 * 2]; // 2MB
        while (inputStream2.read(buffer2)!=-1){} // 90 ms

        long duration2 = StopWatch.stop();
        System.out.println(duration2);

        //-------------- Test reading 100 MB file. --------------------

        StopWatch.start();

        BufferedInputStream inputStream3 = new BufferedInputStream(new FileInputStream(new File(DumpDataWriter.input100MB)));
        byte[] buffer3= new byte[2048 * 1024]; // 2MB
        while (inputStream3.read(buffer3)!=-1){} // 280 ms

        long duration3 = StopWatch.stop();
        System.out.println(duration3);

        //-------------- Test reading 1000 MB file. --------------------

        StopWatch.start();

        BufferedInputStream inputStream4 = new BufferedInputStream(new FileInputStream(new File(DumpDataWriter.input1000MB)));
        byte[] buffer4= new byte[2048*1024*5]; // 10MB
        while (inputStream4.read(buffer4)!=-1){} // 3300 ms

        long duration4 = StopWatch.stop();
        System.out.println(duration4);

    }
This approach uses direct buffering therefore eliminates read calls.
We should be careful because of EOF exception.
src/oi/UsingDirectBuffering.java