Разница между 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 ответов:
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 является:
- PrintWriter может общаться непосредственно с файлом, а также может общаться через какой-то объект Writer.
PrintWriter printwriter = new PrintWriter("blah.txt");
(или)
FileWriter filewriter = new FileWriter("blah.txt"); PrintWriter printwiter = new PrintWriter(filewriter);
мы можем записать любой тип примитивных данных непосредственно в файл (потому что мы есть дополнительные перегруженные версии методов PrintWriter т. е. print() и println()).
printwriter.print(65); //65
bufferedwriter.write(65); //A
printwriter.println(true); //true