2013-07-27 6 views
6

Я хотел бы знать, буферизуется ли FileWriter.FileWriter vs BufferedWriter

В this SO вопрос, кажется, что это, однако в this SO вопрос, кажется, что это не так. (Это будет системный вызов для каждого времени записи (..) вызывается.

Так в основном . читают эти два Q & AI я немного запутался ли кто-нибудь в состоянии четко объяснить это

заранее спасибо

EDIT:. Проблема решена путем чтения this API, о котором я цитируя Соответствующая часть:

Каждый вызов метода записи() вызывает кодирование конвертер для быть вызван на данного символа (ов). Результирующие байты составляют , накопленные в буфере, прежде чем записываться в базовый вывод . Размер этого буфера может быть указан, но по умолчанию это достаточно большой для большинства целей. Обратите внимание, что символы, переданные в методы write(), не буферизуются.

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

Writer out = new BufferedWriter (новый OutputStreamWriter (System.out));

Поскольку FileWriter расширяет OutputStreamWriter, это относится и к нему.

Спасибо за ваше время, хотя, я знаю, я спросил кое-что совершенно конкретное.

ответ

0

FileWriter не буферизацией, вы должны использовать BufferedWriter в качестве обертки:

final int myBufferSize = 2048; 

Writer myWriter = new BufferedWriter(new FileWriter, myBufferSize); 
+0

Что относительно размера буфера по умолчанию? – Rollerball

0

Я бы recomand всегда использовать BufferedWriter. Он позволяет вам контролировать фактический размер буфера, и вы можете гарантировать, что независимо от используемой JVM IO будет буферизироваться, что приносит огромный прирост производительности ввода-вывода.

+0

Хорошо, но как насчет FileWriter? Он имеет только этот знаменитый стандартный байтовый буфер? Как это работает? это JVM, который его обрабатывает? – Rollerball

+0

Взгляд в коде JDK 1.7 показал запись Buffer в Writer Baseclass. Таким образом, у всех авторов есть этот буфер. BufferedWriter использует второй буфер private char cb []; Это приводит к выводу, что этот скрытый буфер не может быть частью всех реализаций JDK (как насчет android?) – morpheus05

+1

№. Метод записи переопределяется в OutputStreamWriter. Буферизация происходит в StreamEncoder, используемом OutputStreamWriter, который кодирует символы в байты. –