2013-06-20 6 views
2

В основном я хотел бы знать, является ли PrintWriter буферным Writer. Я видел код как PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file))); Однако из this javadoc:Является ли PrintWriter BufferedWriter

Параметры: файл - файл для использования в качестве пункта назначения этого писателя. Если файл существует, он будет усечен до нулевого размера; в противном случае будет создан новый файл . Вывод будет записан в файл и буферизирован .

Итог: Я думаю, что PrintWriter в буфере, так как Javadoc «вид упоминает» (см цитаты), и если я не сбрасываю с PrintWriter он не получает печать. Вы подтверждаете мою диссертацию? В этом случае, почему есть код, который выглядит следующим образом: PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file))); устаревший код?

Заранее спасибо.

ответ

2

Технически, это не BufferedWriter. Он прямо распространяется на Writer. Тем не менее, кажется, что может использовать BufferedWriter в зависимости от вызываемого вами конструктора. Для exampe посмотреть на конструктор, который проходит в String:

public PrintWriter(String fileName) throws FileNotFoundException { 
    this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName))), 
     false); 
} 

Кроме того, вы не используете конструктор для Javadoc вы связаны с. Вы использовали конструктор, который принимает Writer. Этот, похоже, не использует BufferedWriter. Это его исходный код:

/** 
* Creates a new PrintWriter, without automatic line flushing. 
* 
* @param out  A character-output stream 
*/ 
public PrintWriter (Writer out) { 
    this(out, false); 
} 

/** 
* Creates a new PrintWriter. 
* 
* @param out  A character-output stream 
* @param autoFlush A boolean; if true, the <tt>println</tt>, 
*     <tt>printf</tt>, or <tt>format</tt> methods will 
*     flush the output buffer 
*/ 
public PrintWriter(Writer out, 
        boolean autoFlush) { 
    super(out); 
    this.out = out; 
    this.autoFlush = autoFlush; 
    lineSeparator = java.security.AccessController.doPrivileged(
     new sun.security.action.GetPropertyAction("line.separator")); 
} 
+0

Хорошо, если построено с файлом/fileName, он использует BufferedWriter неявно, иначе он должен быть объявлен в конструкторе? – Rollerball

+0

Не совсем. Это зависит от используемого вами конструктора. Вы должны смотреть на источник, чтобы быть уверенным, или вы всегда можете создать его, как вы делали выше, и не думать об этом. –

+0

Зачем делать его автозапускаемым, если не буферизованным? – Rollerball

Смежные вопросы