Я изучаю около 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
.
И когда я использую выше,что происходит с внутренним буфером?