Недавно наткнулся на такой вопрос для собеседования: "Почему в OutputStream есть метод flush(), а в InputStream его нету?" Может кто-то помочь?
Sasha
2 уровень
Привет)
Решен
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Павел
26 сентября 2021, 16:38решение
OutputStream взаимодействует с ОС, которая пишет байты блоками, скажем в файл. Если ты блок
последний блок заполнил не полностью, то ОС не знает будут ли еще байты, ты flush() говоришь "ок, записывай". Читают также, блоками, даже если тебе нужен всего один байт, будет прочитано, скажем, 256 и ты не будешь расстраиваться, если остальные 255 пропадут, т.е. flush() не нужен.
+2
Wladyslaw Java Developer Master
26 сентября 2021, 15:06решение
Потому что OutputStream знает что его имплементации могут что-то там кешировать\оптимизировать с точки зрения перформанса, а InputStream - нет. Что, кстати, не есть хорошо с точки зрения Coupling-а в конектсте GRASP-а
В том смысле что когда ты читаешь - опитмизацией является считывание из источника сразу большего объема инфы, а возвращение ее тебе частями - тут не нужно твое участие.
А когда ты пишешь - тебе необходимо знать что там может быть какой-то буффер, который пишется не сразу когды ты хочешь - а когда это будет целесообразно. Но ты можешь этот процесс зафорсить.
Но когда джаву дезайнили - такого понятия как GRASP еще не существовало, вроде, так що маємо те, що маємо.
+2
Sasha Middle Java Developer в EPAM
26 сентября 2021, 19:17
Close() вызовет flush()?
0
Wladyslaw Java Developer Master
27 сентября 2021, 14:04
В общем - зависит от имплементации
0