Разница между java.io.PrintWriter и java.io.BufferedWriter?
Прочтите код ниже:
// A.class
File file = new File("blah.txt");
FileWriter fileWriter = new FileWriter(file);
PrintWriter printWriter = new PrintWriter(fileWriter);
// B.class
File file = new File("blah.txt");
FileWriter fileWriter = new FileWriter(file);
BufferedWriter bWriter = new BufferedWriter(fileWriter);
В чем разница между этими двумя методами?
Когда мы должны использовать PrintWriter над BufferedWriter?
Ответы
Ответ 1
http://java.sun.com/javase/6/docs/api/java/io/BufferedWriter.html и http://java.sun.com/javase/6/docs/api/java/io/PrintWriter.html детализируйте различия.
Основная причина использования PrintWriter - получить доступ к методам printXXX (например, println (int)). Вы можете по существу использовать PrintWriter для записи в файл так же, как вы бы использовали System.out для записи на консоль.
BufferedWriter - эффективный способ записи в файл (или что-то еще), поскольку он будет буферизовать символы в памяти Java раньше (возможно, в зависимости от реализации), отбрасывая на C, чтобы выполнить запись в файл.
Нет такого понятия, как "PrintReader", ближайший к вам, вероятно, java.util.Scanner.
Ответ 2
PrintWriter
дает больше методов (println
), но самая важная (и тревожная) разница, о которой нужно знать, заключается в том, что она проглатывает исключения.
Вы можете позвонить checkError
позже, чтобы узнать, произошли ли какие-либо ошибки, но обычно вы используете PrintWriter
для таких вещей, как запись на консоль - или в "быстрые" n грязные "приложения, в которых вы не используете хотят быть обеспокоены исключениями (и где долгосрочная надежность не является проблемой).
Я не уверен, почему аспекты "дополнительного форматирования" и "не проглатывают исключения" включены в один и тот же класс. Форматирование, очевидно, полезно во многих местах, где вы не хотите проглатывать исключения. Было бы неплохо увидеть, что BufferedWriter
получит одни и те же способности в какой-то момент...
Ответ 3
Как сказано в ответе TofuBeer, оба имеют свои специальности. Чтобы в полной мере воспользоваться PrintWriter (или любым другим автором), но также использовать буферизированную запись, вы можете обернуть BufferedWriter следующим образом:
PrintWriter writer = new PrintWriter(
new BufferedWriter (
new FileWriter("somFile.txt")));
Ответ 4
PrintWriter просто предоставляет методы печати в любом режиме Writer в символьном режиме.
BufferedWriter более эффективен, чем в соответствии с его буферизованными методами.
И он поставляется с методом newLine(), в зависимости от вашей системной платформы, для правильного управления текстовыми файлами.
BufferedReader позволяет читать текст из файла с байтами, преобразованными в символы. Это позволяет читать строки за строкой.
Нет PrintReader, вам нужно выбрать другую реализацию Reader в соответствии с форматом ввода.
Ответ 5
В общем, Writer немедленно отправляет свой вывод базовому символу или потоку байтов. Если не требуется быстрый вывод, рекомендуется обернуть BufferedWriter вокруг любого Writer, чьи операции write() могут быть дорогостоящими, например FileWriters и OutputStreamWriters. Например,
Примечание. Текстовое содержимое в блоках кода автоматически обернуто словами
PrintWriter out =
new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
будет буферизовать вывод PrintWriter в файл. Без буферизации каждый вызов метода print() приведет к преобразованию символов в байты, которые затем будут немедленно записаны в файл, что может быть очень неэффективным.
Ответ 6
BufferedWriter - записывает текст в выходной поток символов, буферизуя символы из потока символов.
PrintWriter - печатает форматированные представления объектов в поток вывода текста.
Ответ 7
Я думаю, что причина использования PrintWriter уже упоминалась выше, но одной из важных причин является передача файлового объекта непосредственно в конструктор PrintWriter, который упрощает его использование.
File file=new File("newfile.txt");
PrintWriter pw=new PrintWriter(file);