Потоки ввода-вывода - IO и NIO (

Поділитися
Вставка
  • Опубліковано 23 гру 2024

КОМЕНТАРІ • 88

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil 2 роки тому +17

    0:00:00 Общий обзор: файлы, сеть, память, порты COM, USB.
    0:03:55 Два типа ввода вывода: двоичный, символьный
    0:08:28 двоичный: FileInputStream, FileOutputStream; read(), write() - работа с одиночными байтами - медленный вариант
    0:15:53 двоичный: buffer = new byte[n]; read(buffer); write(buffer) - работа через буфер - быстрее вариант
    0:19:48 try with resourses
    0:23:05 символьный: FileReader, FileWriter - работа с одиночными символами - медленный вариант
    0:26:54 символьный: buffer = new char[n]; read(buffer); write(buffer) - работа через буфер - быстрее вариант
    0:30:14 Потоки IO можно передавать последовательно друг другу
    0:33:50 InputStreamReader - преобразование потока байтов в поток символов
    0:37:15 BufferedReader - эффективное буферизированное чтение
    0:44:26 Работа в памяти - подводка к этому
    0:48:36 Работа в памяти: ByteArrayInputStream, ByteArrayOutputStream
    0:52:58 Работа с файловой системой - подводка к этому
    0:55:19 Работа с файловой системой. Класс File
    1:02:24 FileFilter
    1:09:07 NIO
    1:10:57 Канал Channel, Буфер Buffer
    1:46:30 Класс Paths

  • @mrnght2740
    @mrnght2740 6 місяців тому +15

    Передаю привет всем будущим поколениям джавараша)

  • @sgkng9697
    @sgkng9697 3 роки тому +12

    Большое спасибо. Пришёл с Джавараш от комментария Миши Зефира. Посмотерл кусок - реально всё стало понятнее, начал решать задачи

  • @user-uo2tmap
    @user-uo2tmap 3 місяці тому

    Отлично объясняете.
    Я студент Javarush University, и даже несмотря на дополнительные видео курса, прояснилось только после вашего объяснения.
    Я уже было отчаялся, честное слово. Спасибо вам!

  • @ЕкатеринаЛьвова-е1ф

    Вот что называется опытный программист:) Столько нюансов!!! Спасибо Вам!!!

  • @ОлегНесмелов
    @ОлегНесмелов Рік тому +1

    Не первый раз смотрю видео Антона, вот реально получаю эстетическое удовольствие от грамотной речи человека, знания , конечно, тоже на высоте, но эта интеллигентность речи, это нечто!!!

  • @45053
    @45053 8 місяців тому

    На сколько я знаю - не обязательно вызывать close() для всех потоков, достаточно для последнего (или даже для любого, поправьте кто знает).
    Автору спасибо, все разложилось по полочкам.

  • @АрсенийОстапенко-м7в

    Проходил курс на javaRush и вот эту тему не понял полностью после 6 лекций. Пришлось самостоятельно искать в интернете и это видео сильно помогло в понимании. Спасибо, автор!)

    • @Zhake1993
      @Zhake1993 3 роки тому +5

      кстати тоже на джавараше особо не понял, у меня такая каша началась после этого, надеюсь это видео поможет

    • @nubex2857
      @nubex2857 3 роки тому

      стал программистом?

    • @nubex2857
      @nubex2857 3 роки тому

      @@Zhake1993 Стал программистом?

    • @LoveSneakerPimps
      @LoveSneakerPimps 2 роки тому

      @@nubex2857 да мне кажется рановато ещё на разраба , спустя лишь примерно 8 мес? если ток джуном где нибудь

    • @nubex2857
      @nubex2857 2 роки тому +1

      @@LoveSneakerPimps это не лишь, а уже. Лучше идти джуном, чем дальше учиться

  • @tsudzukeru2891
    @tsudzukeru2891 4 роки тому +3

    Без спешки, спокойно и доходчиво. Спасибо. Буду всем советовать!

  • @Devivl
    @Devivl Рік тому

    Благодарю за краткость и доступность.

  • @robbybobbi963
    @robbybobbi963 4 роки тому +1

    наконец то нашел хорошее видео по этой теме, спасибо большое

  • @nde375
    @nde375 2 роки тому

    Спасибо! Очень нравится, как вы объясняете.

  • @shukuchi8460
    @shukuchi8460 4 роки тому +1

    Спасибо! Очень информативная и понятная лекция.

  • @yevheniyserhiyenko5761
    @yevheniyserhiyenko5761 3 роки тому +1

    Супер лекции
    Круто объясняешь

  • @nadiiar75
    @nadiiar75 2 роки тому

    спасибо вам большое за лекцию. все очень понятно изложено.

  • @ВалераКонь-п3ж
    @ВалераКонь-п3ж 7 років тому +3

    Дядь , спасибо ) все четко по делу. + в карму тебе

  • @МаксимКизилов-э3я
    @МаксимКизилов-э3я 4 роки тому +2

    Большое спасибо!

  • @wuwarrior94
    @wuwarrior94 3 роки тому

    Спасибо за данный вебинар!

  • @Дмитрий-ю9к3г
    @Дмитрий-ю9к3г 4 роки тому +1

    Антон, я уже писал про звук. Вот хотел показать, где особо заметна проблема звука. Слышите как на 2:47 прорывается слово "как"? Или с 6:28 звук из громкого превратился в тихий за 6 секунд. И так на протяжении всего видео. Громкость сигнала постоянно меняется(плохо реализованный программный компрессор пытается регулировать громкость поступающего звукового сигнала).

    • @java8599
      @java8599  4 роки тому

      Я в данном случае не мог вообще управлять уровнем - это запись на базе системы вебинаров. Они такого рода звуковые настройки не давали регулировать.
      А вручную искать и выправлять - слишком много времени. Не вижу смысла.

    • @Дмитрий-ю9к3г
      @Дмитрий-ю9к3г 4 роки тому

      @@java8599 ну это на вашей стороне происходит. Гарнитура какая-то чувствительная что ли.
      Куда ее втыкаете, кстати? У вас в ПК есть гнездо как в мобильниках для гарнитур? Или у вас специальные наушники с микрофоном у которых 2 штекера надо подтыкать?

    • @java8599
      @java8599  4 роки тому

      @@Дмитрий-ю9к3г Нет, это не происходило на моей стороне - звук считывался программой для вебинаров сразу с микрофона и напрямую пересылался на сервер провайдера. Никаких настроек на моем компьютере эта программа не предоставляла. Так что увы. Именно этот цикл вебинаров не мог быть сразу обработан по звуку.
      А потом делать обработку слишком затратно по времени. Я же не на звукорежиссера учился :)

    • @Дмитрий-ю9к3г
      @Дмитрий-ю9к3г 4 роки тому

      @@java8599 подробностей не узнал. Но представляя ситуацию дальше, могу предположить, что вы или громко говорите, что в аппаратной части уже звук давится или сам микрофон близко ко рту расположен. Может быть в самой гарнитуре что-то зашито или она просто не качественная. Или ОСь как-то косячно принимает звук. Ну, в общем я уверен на 99%, что на это можно повлиять действиями именно с вашей стороны.

    • @Дмитрий-ю9к3г
      @Дмитрий-ю9к3г 4 роки тому +1

      @@java8599 не хотелось бы, чтобы показалось, будто я предъявы кидаю) Просто озвучиваю, то что невольно вижу(слышу). Может захотите прокачать эту сторону канала.

  • @sergka3626
    @sergka3626 2 місяці тому

    Не понял зачем второй выходной буфер, вроде прикол же как раз в том, что можем флипать его и переключать режимы чтения/записи. То есть также как в io с массивом байт, только здесь нам не нужно помнить сколько байт мы прочитали.
    Еще непонятно почему это должно работать быстрее, по крайней мере чтение файлов.

  • @roppeld
    @roppeld 4 роки тому +1

    У меня вопрос. Когда массив buffer заполняется под завязку байтами (или символами), то как он очищается? автоматически, я так понимаю? как только записалось методом write(), то происходит обнуляция, поэтому в цикле стоит второй аргумент метода write(), 0, типо, это неважно, если массив изначально заполнился полность? А если в какой-то момент не заполнится полностью, то как это выяснить, отследить и стоит ли писать код в цикле, упреждающий эту ситуацию, дописывая в аргументе точную цифру (хотя я не знаю, как на нее выйти). несколько этот момент хотелось бы прояснить.

    • @java8599
      @java8599  4 роки тому +1

      Массив не очищается, но заполняется новыми данными.. Когда считываются байты через read возвращается количество реально считаных байтов. Значит в массиве надо взять байты начиная с элемента 0 и до элемента, который равен числу считанных байтов. Вот собственно и все.

    • @roppeld
      @roppeld 4 роки тому

      @@java8599 здорово, благодарю! Это все, что мне хотелось прояснить (>▽

  • @iryna6389
    @iryna6389 6 років тому

    Огромное спасибо!!!! Все понятно. Видео очень помогло!

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil 2 роки тому

    В книге "Head First Паттерны проектирования. 2022г"
    есть неплохой пример работы с IO в главе про декоратор

    • @Daniel-mo1iy
      @Daniel-mo1iy 2 роки тому

      доброго времени суток. вы бы посоветовали данную книгу новичкам? (в java).

    • @Das.Kleine.Krokodil
      @Das.Kleine.Krokodil 2 роки тому

      @@Daniel-mo1iy Многие моменты очень хорошо поданы, начальные главы например. Но некоторые не очень, например где они вводят в пример какие то библиотеки, или перегружают пример информацией. Я бы рекомендовал эту книгу, но нужно и другие источники использовать. Например некоторые примеры для меня лучше в Википедии поданы.

  • @ВладиславТрунов-т2т

    Шикарно! Спасибо!!!

  • @jopinfuyiro5570
    @jopinfuyiro5570 3 роки тому

    в 2017 году люди не умели записывать видео с компьютера?)
    а еще мак и быстрый диск)
    видео информативное+

  • @Дмитрий-ю9к3г
    @Дмитрий-ю9к3г 4 роки тому

    Я не понимаю, почему в цикле while сначала записываете, а потом читаете? 17:34 и 26:17. Мы же последний байт теряем, если я все правильно понимаю.

    • @java8599
      @java8599  4 роки тому

      Неправильно понимаете. Первый байт считывает ДО цикла. И если он считался. то мы заходим в цикл обработки и в конце него снова считываем байт. И если он считался, то цикл повторяется для вновь считанного байта. И снова в конце считываем и пытаемся продолжить цикл только если байт считался. И т.д..
      Учитесь читать код - это крайне важный навык.

    • @Дмитрий-ю9к3г
      @Дмитрий-ю9к3г 4 роки тому

      ​@@java8599 да, затупил. Просто проверку по-другому всегда реализовывал. С помощью готовых методов, типа ready().

  • @fredor2844
    @fredor2844 4 роки тому +3

    13:56. Т.е. получается, что самый первый байт мы не запишем в новый файл)))

    • @java8599
      @java8599  4 роки тому +3

      Судя по всему - я действительно допустил ошибку. Спасибо за замечание. Исправить уже не получится. К сожалению. Но для варианта чтения блоками по идее все правильно.

    • @fredor2844
      @fredor2844 4 роки тому

      @@java8599 спасибо Вам за ваш труд! У вас отличные материалы и, безусловно, талант к преподаванию.

  • @mkrugl
    @mkrugl 4 роки тому +1

    Здравствуйте. А будет ли видео про разницу SQL и NonSQL? В чём суть NonSQL?

    • @java8599
      @java8599  4 роки тому

      Для начала можно посмотреть вот это видео: ua-cam.com/video/7Cx40sUIyMQ/v-deo.html

    • @mkrugl
      @mkrugl 4 роки тому

      Изучаем Java я смотрел. Благодарю. Я вам тот же самый вопрос задал в комментариях под ним).

    • @java8599
      @java8599  4 роки тому

      Я так понял, вопрос - в чем суть NoSQL ?

    • @mkrugl
      @mkrugl 4 роки тому

      Изучаем Java да, именно. Хотелось бы знать.

  • @ЕкатеринаЛьвова-е1ф

    Единственное, что никак не пойму, почему мы ссылки на объекты (FileInputStream, FileOutputStream и тп. с классами, работающими с символами) кладем в абстрактный класс?

    • @java8599
      @java8599  3 роки тому

      Почитайте про полиморфизм. Я могу использовтаь ссылку абстрактоного класса для указания на объект подкласса.
      Простыми словами - я могу собакой называть и добермана, и овчарку, и пуделя. Если мне важно, что это собака, а не конкретная порода.

  • @AndreiPadikk
    @AndreiPadikk 4 роки тому

    спасибо. хороший webinar.
    подскажите пожалуйста как в NetBeans включить всплывающие Tooltips, которые показывают все конструкры при наведении на код. долго гуглил, но кроме разного набора Hints (что не совсем то) ничего не нашлось.

    • @java8599
      @java8599  4 роки тому

      Что значит "показывают все конструкторы при наведении на код" ? Это о чем ?

    • @AndreiPadikk
      @AndreiPadikk 4 роки тому

      @@java8599 например на 34:50 секунде видео. когда вы создаёте новый объект new InputStreamReader(). в всплывающем окне показаны 4 возможных конструктора этого класса.
      как я не наводил мышку, и не настраивал Hints в меню Tools\Options\Editor у NetBeans, - у меня такая подсказка не всплывает. уже подумал, возможно это зависит от реализации JVM; я на Windows, а не на Mac-e.

    • @java8599
      @java8599  4 роки тому

      @@AndreiPadikk Так это не список конструкторов, а список возможных входных параметров. По-моему Ctrl-P. Не помню точно - давно не пользуюсь NetBeans.

    • @AndreiPadikk
      @AndreiPadikk 4 роки тому

      @@java8599 да, точно, Ctrl-P. спасибо. (Int.Idea как-то более friendly))

    • @AlexSmile-y2x
      @AlexSmile-y2x 3 роки тому

      @@AndreiPadikk а ничего что в IDEA точно также Ctrl+P?))))

  • @andreyzaytsev589
    @andreyzaytsev589 3 роки тому

    Вот интересно, у меня когда буфер опустошается то его размер = 0, т.е. проверка работает только когда while (r!=0){

  • @СтепанТицейко
    @СтепанТицейко 7 років тому

    Спасибо, очень помог!

  • @eduardmart1237
    @eduardmart1237 5 років тому +1

    А в чем NIO не блокирующий то?
    ведь все строчки кода же последовательно будут исполняться.
    Это же не JS где есть async await

    • @java8599
      @java8599  5 років тому

      А многопоточный вариант рассматривался ?

    • @eduardmart1237
      @eduardmart1237 5 років тому

      Не я в том плане что его неблокируемость заключается в повышении производительности?
      Но все операции все равно идут одна за одной?

  • @char-24
    @char-24 5 років тому

    Большое спасибо за проделанную работу. Вроде знаком, а все же, некоторые моменты новые увидел, да и память освежил.

  • @nikitinnnnn
    @nikitinnnnn 7 років тому

    Спасибо Антон. Скажите пожалуйста, может ли метод SocketChannel.write(ByteBuffer) писать серверу по внешней сети без задержек или с задержками меньше 100мс? У меня почему то в моем простом тесте при передаче буфера размером 1024 byte за минуту клиент выдает 10-20 задержек по 125-200мс, это я что то не так написал или этот метод так и работает?

  • @рачс
    @рачс Рік тому

    звук ОК(( Но очень хороший материал.

  • @artemokunkov6591
    @artemokunkov6591 4 роки тому

    лютый + в карму

  • @boundlesspower5564
    @boundlesspower5564 7 років тому

    четко

  • @QintruderQ
    @QintruderQ 7 років тому

    Я представил это (NIO) как резервуары с водой, может поможет кому.
    Вопрос, чтобы работать со строками, нужно разобраться с CharBufer или есть более простое решение.
    Мне просто нужно в txt файле искать строку, потом производить с ней изменения и уже потом пересоздать файл.

    • @QintruderQ
      @QintruderQ 7 років тому

      Досмотрел видео, сделаю через .nio.File.Files.

  • @chukkykatz1007
    @chukkykatz1007 7 років тому +1

    Отличное видео. Но блин, чувак, что у тебя с микрофоном? Чего он так орет периодически?

  • @andrew-ua
    @andrew-ua 4 роки тому

    вы издеваетесь, а где Scanner ???? Шо за нафиг???

    • @java8599
      @java8599  4 роки тому +4

      Как сказал Козьма Прутков - нельзя объять необъятное.
      Если считаете, что Scanner очень важная вещь - сделайте свой вебинар или свое видео.

  • @ДмитрийКарякин-в4з
    @ДмитрийКарякин-в4з 6 років тому +1

    Как же ты бесишь своими прилагательными (красивенький, миленький)...

    • @ModestItogo
      @ModestItogo 5 років тому

      точно лишней слащавой пурги много

    • @rufat85
      @rufat85 4 роки тому

      а по мне норм

    • @gagogoga794
      @gagogoga794 4 роки тому +3

      Скажи спасибо за инфу.

    • @РомчанскийРомчансков
      @РомчанскийРомчансков 4 роки тому +9

      Не выебывайся, тебе тут лекцию отличную предоставили бесплатно

    • @ПавелПузырев-д6х
      @ПавелПузырев-д6х 3 роки тому

      Это синтаксический сахар.
      Спасибо за отличную лекцию!

  • @EdwardNorthwind
    @EdwardNorthwind Рік тому

    А зачем в примере с NIO и Channel второй буфер? Что мешает написать:
    int r = inChannel.read(bb);
    while (r != -1) {
    bb.flip();
    outChannel.write(bb);
    bb.clean();
    r = inChannel.read(bb);
    }

  • @felixvoid5521
    @felixvoid5521 11 місяців тому

    Теперь я знаю как пылесос затягивает и с каким звуком, если у него есть труба ua-cam.com/video/r9paa9AJ7Gk/v-deo.htmlsi=4IoR7gS6quAtQvdY&t=2480
    А так лекция ужасно душная. Объясняет плохо. Не знаю чего все с JR рекомендуют его.