Разница между FileInputStream с буфером и BufferedInputStream - PullRequest
0 голосов
/ 12 декабря 2018

Я изучаю около java I/O, у меня есть кое-что, что мне интересно.

В чем разница между обоими?

@Test
public void fileInputReadWithBuffer() throws IOException {
    FileInputStream fileInputStream = new FileInputStream("/Users/home/Desktop/test.mov");

    byte[] temp = new byte[8192];

    int n;
    long start = System.currentTimeMillis();
    while((n = fileInputStream.read(temp)) != -1){
    }
    long end = System.currentTimeMillis();

    System.out.println((end - start) / 1000.0);
}

@Test
public void bufferedInputRead() throws IOException {
    BufferedInputStream bufferedInputStream =
            new BufferedInputStream(new FileInputStream("/Users/home/Desktop/test.mov"));

    int n;
    long start = System.currentTimeMillis();
    while((n = bufferedInputStream.read()) != -1){
    }
    long end = System.currentTimeMillis();

    System.out.println((end - start) / 1000.0);
}  

Я думал, что это то же самое (Потому что BufferedInputStream использует внутренний байтовый буфер, и значение по умолчанию - 8192),
, но это не так.

Использование BufferedInputStream without external buffer намного медленнее.
Первый тест занял 0,144 секунды, второй тест занял 6,55 секунды.
(test.mov размер файла 202MB)

Итак.. в чем разница между обоими?

И что происходит, когда я использую приведенный ниже код?

@Test
public void bufferedInputReadWithBuffer() throws IOException {
    BufferedInputStream bufferedInputStream =
            new BufferedInputStream(new FileInputStream("/Users/home/Desktop/test.mov"));

    byte[] temp = new byte[8192];

    int n;
    long start = System.currentTimeMillis();
    while((n = bufferedInputStream.read(temp)) != -1){
    }
    long end = System.currentTimeMillis();

    System.out.println((end - start) / 1000.0);
}

Хотя он также использовал внешний буфер, он кажется медленнее, чем FileInputStream with external buffer.
И когда я использую выше,что происходит с внутренним буфером?

...