Здравствуйте. Анализирую код серьезных проектов. Почему в них в основном пользуются в основном Stream а не Reader. Например даже код для сохранения URL на диск использует байтовый поток. Это что, как понимаю "best practice" для написания кода?для лучшей переносимости и для использования, например в stream API. Так ли это? Или я ошибаюсь.
Alexandr Grishin
27 уровень
Stream а не Reader.
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Сергеев ВикторMaster
23 октября 2020, 16:26
Stream - это поток байтов
Reader - поток символов
Например фильм состоит из байтов, но не из символов )
0
Alexandr Grishin
23 октября 2020, 16:43
Ну это я прошел и понимаю..Очень многие примеры кода пользуются байтовым поток, хотя по идее можно пользоваться ридером.
Почему многие примеры кода
Не оборачивают вот так
А испольуют вот так
то есть работают с байтовым потоком хотя здесь будет html.. 0
Justinian Judge в Mega City One Master
23 октября 2020, 18:10
а можешь дать ответ, а зачем оборачивать?
Почему у тебя такие мысли вообще возникли, какие задачи ты хочешь решить с помощью BufferedReader в контексте этой одной строки кода, чем он тебе облегчит и что именно?
0
Alexandr Grishin
23 октября 2020, 18:19
Ну я не про BufferedReader вообще .допустим просто про символьный поток.
0
Justinian Judge в Mega City One Master
23 октября 2020, 21:10
Я мало что могу добавить к комментарию Виктора.
То как ты описал задачу, которую решает код,
у нас есть байтовый поток.
Нам нужно записать поток байт.
Логично для чтения байтовый поток обернуть в соответствующий буфер BufferedInputStream.
Конкретная задача - конкретное решение.
Где здесь место символьному потоку?
Вот если парсить страничку вручную на лету, другое дело, но что там с потоком дальше происходит мы не знаем.
На джава раше чему учат.
1. Использовать буфферизированные обертки.
2. Что выбор символьного/байтового потока определяется ТехЗаданием.
ЕСЛИ нам нужно скопировать сожержимое файла/ресурса, скопировать кусок файла, то есть мы работаем с файлом как набором байт, мы используем байтовые потоки.
ЕСЛИ нам нужно работать с файлом как с символьным контейнером - найти букву, найти слово, прочитать какую-то строку по заданному критерию, то мы используем символьные потоки.
Твое описание задачи и цитируемая тобой строка кода этим правилам соответствует.
+3
Alexandr Grishin
24 октября 2020, 08:00
Спасибо большое... Просто не хотелось бы в будущем придумывать велосипеды и неправильно использовать инструменты. Посмотрел код парсера jsoup - там действительно свой ридер используют. До этого смотрел код с Gradle - операции там реализованы в основном байтовыми потоками.
+1