Сравнение производительности: BufferedInputStream и Non-BufferedInputStreamJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Сравнение производительности: BufferedInputStream и Non-BufferedInputStream

Сообщение Anonymous »

Я создал файл с 1 000 000 нулей (980 КБ) и измерил, как быстро его копировать в другой файл (используя буферизованный и небуферизованный как для ввода, так и для вывода) с размером буфера по умолчанию (8192 байта). Удивительно, но буферизация ввода и вывода значительно повысила производительность. вот результат
Хотя я понимаю, что чтение больших файлов, превышение размера буфера (8 КБ) может свести на нет преимущества буферизации, я не понимаю, почему производительность от использования буфера все равно выше чем не использовать его (по крайней мере, для этого требуется меньше системных вызовов). Единственным недостатком, который я здесь вижу, является ненужное использование памяти самим буфером.
Вопрос: 1. За исключением сред с ограниченной памятью, где использование памяти является проблемой, почему бы и нет мы всегда используем буферизацию как для ввода, так и для вывода?
  • Почему копировать файл быстрее, если вывод буферизован?
Мой код включает такие функции, как t1(), t2(), t3() и t4(), о которых я не буду здесь рассказывать полностью, поскольку они похожи на предоставленный код:

Код: Выделить всё

static void t2() {
System.out.println("Copy file using BufferedInputStream (8192), with BufferOut");
long startTime = System.nanoTime();

try (BufferedInputStream br = new BufferedInputStream(new FileInputStream("text.txt"));
var bOut = new BufferedOutputStream(new FileOutputStream("text_3.txt"))) {
int i;
while ((i = br.read()) != -1) {
bOut.write(i);
}

} catch (IOException e) {
System.out.println(e);
}
long endTime = System.nanoTime();
long duration = (endTime - startTime) / 1000000;

System.out.println("Duration: " + duration + " millisecond");
}
Я пробовал использовать in.transferTo как с буферизованным вводом, так и с выводом, и результат еще лучше (1 цифра миллисекунды). Я также планирую поэкспериментировать с разными размерами буфера. Я читал, что оптимальный размер зависит от размера блока файловой системы, который в моем случае составляет 4096 байт. Должен ли я установить размер буфера на 4096 или чем больше, тем лучше?

Подробнее здесь: https://stackoverflow.com/questions/784 ... nputstream
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Джава. В какой момент BufferedInputStream пополняется из InputStream?
    Anonymous » » в форуме JAVA
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Должен ли я всегда оборачивать InputStream как BufferedInputStream?
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Каков размер буфера по умолчанию для java.io.BufferedInputStream на старых и экзотических JVM?
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Размер буфера для BufferedInputStream
    Anonymous » » в форуме JAVA
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Создать ZipInputStream из BufferedInputStream или нет
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»