Как правильно, что лучше использовать для таких целей(как в задаче) .BufferedReader reader, BufferedWriter и StringBuilder - или StringWriter, Scanner и FileWriter , чем лучше пользоваться? StringBufferInputStream я так понимаю убирают, подскажите кто разбирается в вопросе.
Anonymous #2906713
32 уровень
Как правильно, что лучше использовать для таких целей(как в задаче)
Обсуждается
Комментарии (7)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Денис Enterprise Java Developer
7 августа 2022, 18:24
Когда я читаю такие вопросы, хочется спросить - а в чем принципиальная разница того как ты реализуешь поставленную задачу?
Нет, очевидно, что если какие-то классы или методы помечены как deprecated ими пользоваться не стоит, очевидно, что если твое решение жрет слишком много ресурсов это тоже плохо. Но вот что лучше... то что работает и up to date, как говорится.
Не забивай себе голову вопросами о сортах мороженного, просто учись их кушать :)
Когда я этот курс проходил, прямо в курсе настойчиво рекомендовали обходить класс Scanner стороной, мол он удобен, но в проде не используется. Уж не знаю почему, но действительно ни одного еще не видел :) А вот умение орудовать потоками ввода-вывода и их обертками пригодилось уже не раз.
0
Anonymous #2906713
7 августа 2022, 19:33
Спасибо , понял. Буду Scanner обходить стороной
0
ГоффMaster
7 августа 2022, 21:07полезный
Добавлю - тут бывает, что ученики путают байты, символы и строки. Если речь идёт о построчной обработке текста, то читать лучше строками, это BufferedReader. Если о посимвольной обработке текста, то Reader. Во всех остальных случаях (файл не текстовый) InputStream, читающий байты.
У Scanner есть одна фишка - им можно посмотреть, что там следующее, без того, что бы это считывать, метод hasNextInt(), к примеру. (Но под капотом сканер всё-таки считывает, пытается пропарсить, и если выкидывается исключение, то возвращает false.)
+1
ГоффMaster
7 августа 2022, 21:11
А, важно ещё - любая операция с файлами она долгая. Поэтому записать один раз 500 килобайт за раз гораздо быстрее, чем 500 тыщ раз по одному байту или по одному символу. Всегда надо использовать буферы, даже в Stream можно считать/записать сразу много байт за раз.
0
Денис Enterprise Java Developer
7 августа 2022, 21:22
На сколько I/O тяжелое можно посмотреть на простецком примере кстати.
Сравнить время работы программы с выводом в цикле и без него :) 0
ГоффMaster
7 августа 2022, 21:33
Отличный пример! Аналогичный с выводом в файл, а не в консоль, я бы даже и не рискнул бы запускать ;-)
0
Anonymous #2906713
8 августа 2022, 05:30
Спасибо, логику выбора метода понял.
0