Буфер в FileWriter и BufferedWriter - PullRequest
       85

Буфер в FileWriter и BufferedWriter

0 голосов
/ 14 января 2019

API FileWriter начинается с этих слов:

"Записывает текст в символьные файлы с использованием стандартного буфера размера."

API BufferedWriter начинается с этих слов:

"Записывает текст в поток вывода символов, буферизует символов [...]"

Итак, очевидно, что оба класса используют буферы . К сожалению, API не объясняет различия между этими двумя типами буферов.

Итак, я спрашиваю себя: в чем разница?

Ответы [ 2 ]

0 голосов
/ 14 января 2019

BufferedWriter имеет лучшую реализацию записи в буфер, чем FileWriter, с точки зрения производительности

Если не требуется быстрый вывод, желательно обернуть BufferedWriter вокруг любого Writer, чьи операции write () могут быть дорогостоящими, например FileWriters и OutputStreamWriters. Например,

PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));

Для буферизации FileWriter расширяет OutputStreamWriter , что также указывает на использование BufferedWriter

Для максимальной эффективности рассмотрите возможность помещения OutputStreamWriter в BufferedWriter, чтобы избежать частых вызовов конвертера.

0 голосов
/ 14 января 2019

BufferedWriter более эффективен, когда у вас есть несколько записей. Это экономит небольшие записи и записи в один большой кусок. Ниже приведен метод write () объекта BufferedWriter, который проверяет, заполнен ли буфер if (nextChar >= nChars), и очищает его.

public void write(int c) throws IOException {
    synchronized (lock) {
        ensureOpen();
        if (nextChar >= nChars)
            flushBuffer();
        cb[nextChar++] = (char) c;
    }
}

что касается FileWriter, каждая запись выполняет один системный вызов, в отличие от BufferedWriter, который создает систему после заполнения буфера. Так что если у вас есть несколько небольших записей, BufferedWriter будет более эффективным.

...