Разница между 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?

8 78

8 ответов:

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.писать в консоль.

BufferedWriter-это эффективный способ записи в файл (или что-нибудь еще), поскольку он будет буферизовать символы в памяти Java до (вероятно, в зависимости от реализации) падения на C, чтобы сделать запись в файл.

нет такого понятия, как" PrintReader " ближайший вы получите, вероятно, java.утиль.Сканер.

PrintWriter дает больше методов (println), но самое важное (и тревожное) различие, о котором нужно знать, это то, что он игнорирует исключения.

можно назвать checkError позже, чтобы увидеть, произошли ли какие-либо ошибки, но обычно вы используете PrintWriter для таких вещей, как запись на консоль - или в "быстрых" грязных приложениях, где вы не хотите беспокоиться об исключениях (и где долгосрочная надежность не является проблемой).

Я не уверен, почему "лишние возможности форматирования" и "не проглатывайте исключения" аспекты объединены в один класс-форматирование, очевидно, полезно во многих местах, где вы не хотите, чтобы исключения были проглочены. Было бы здорово увидеть BufferedWriter получить те же самые способности в какой-то момент...

Как сказано в ответе Тофубеера, у обоих есть свои специальности. Чтобы воспользоваться всеми преимуществами PrintWriter (или любого другого писателя) , но также использовать буферизованное письмо, вы можете обернуть BufferedWriter с необходимым следующим образом:

PrintWriter writer = new PrintWriter(
                         new BufferedWriter (
                             new FileWriter("somFile.txt")));

PrintWriter просто предоставляет методы печати на любом писателе в символьном режиме.

BufferedWriter более эффективен, чем, согласно его буферизованным методам. И он поставляется с методом newLine (), в зависимости от вашей системной платформы, для правильного управления текстовыми файлами.

BufferedReader позволяет читать текст из файла, с байтами, преобразованными в символы. Это позволяет читать строку за строкой.

там нет PrintReader, вы должны выбрать другой Реализация читателя в соответствии с форматом вашего ввода.

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

Примечание: текстовое содержимое в блоках кода автоматически завернуто в слова

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

буферизует вывод PrintWriter в файл. Без буферизации, каждый вызов метода print () приведет к преобразованию символов в байты, которые затем будут немедленно записаны в файл, что может быть очень неэффективным.

BufferedWriter-записывает текст в выходной поток символов, буферизуя символы из потока символов. PrintWriter-печать форматированных представлений объектов в поток вывода текста.

PrintWriter является наиболее усовершенствованным писателем для записи символьных данных в файл.

главным преимуществом PrintWriter над FileWriter и BufferedWriter является:

  1. PrintWriter может общаться непосредственно с файлом, а также может общаться через какой-то объект Writer.

PrintWriter printwriter = new PrintWriter("blah.txt");

(или)

FileWriter filewriter = new FileWriter("blah.txt");
PrintWriter printwiter = new PrintWriter(filewriter);
  1. мы можем записать любой тип примитивных данных непосредственно в файл (потому что мы есть дополнительные перегруженные версии методов PrintWriter т. е. print() и println()).

    printwriter.print(65); //65
    bufferedwriter.write(65); //A
    printwriter.println(true); //true

Я думаю, что причина использования PrintWriter уже упоминалась выше, но одна из важных причин заключается в том, что вы передаете объект file непосредственно конструктору PrintWriter, что упрощает его использование.

File file=new File(“newfile.txt”);
PrintWriter pw=new PrintWriter(file);