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
Отлично объясняете. Я студент Javarush University, и даже несмотря на дополнительные видео курса, прояснилось только после вашего объяснения. Я уже было отчаялся, честное слово. Спасибо вам!
Не первый раз смотрю видео Антона, вот реально получаю эстетическое удовольствие от грамотной речи человека, знания , конечно, тоже на высоте, но эта интеллигентность речи, это нечто!!!
На сколько я знаю - не обязательно вызывать close() для всех потоков, достаточно для последнего (или даже для любого, поправьте кто знает). Автору спасибо, все разложилось по полочкам.
Проходил курс на javaRush и вот эту тему не понял полностью после 6 лекций. Пришлось самостоятельно искать в интернете и это видео сильно помогло в понимании. Спасибо, автор!)
Антон, я уже писал про звук. Вот хотел показать, где особо заметна проблема звука. Слышите как на 2:47 прорывается слово "как"? Или с 6:28 звук из громкого превратился в тихий за 6 секунд. И так на протяжении всего видео. Громкость сигнала постоянно меняется(плохо реализованный программный компрессор пытается регулировать громкость поступающего звукового сигнала).
Я в данном случае не мог вообще управлять уровнем - это запись на базе системы вебинаров. Они такого рода звуковые настройки не давали регулировать. А вручную искать и выправлять - слишком много времени. Не вижу смысла.
@@java8599 ну это на вашей стороне происходит. Гарнитура какая-то чувствительная что ли. Куда ее втыкаете, кстати? У вас в ПК есть гнездо как в мобильниках для гарнитур? Или у вас специальные наушники с микрофоном у которых 2 штекера надо подтыкать?
@@Дмитрий-ю9к3г Нет, это не происходило на моей стороне - звук считывался программой для вебинаров сразу с микрофона и напрямую пересылался на сервер провайдера. Никаких настроек на моем компьютере эта программа не предоставляла. Так что увы. Именно этот цикл вебинаров не мог быть сразу обработан по звуку. А потом делать обработку слишком затратно по времени. Я же не на звукорежиссера учился :)
@@java8599 подробностей не узнал. Но представляя ситуацию дальше, могу предположить, что вы или громко говорите, что в аппаратной части уже звук давится или сам микрофон близко ко рту расположен. Может быть в самой гарнитуре что-то зашито или она просто не качественная. Или ОСь как-то косячно принимает звук. Ну, в общем я уверен на 99%, что на это можно повлиять действиями именно с вашей стороны.
@@java8599 не хотелось бы, чтобы показалось, будто я предъявы кидаю) Просто озвучиваю, то что невольно вижу(слышу). Может захотите прокачать эту сторону канала.
Не понял зачем второй выходной буфер, вроде прикол же как раз в том, что можем флипать его и переключать режимы чтения/записи. То есть также как в io с массивом байт, только здесь нам не нужно помнить сколько байт мы прочитали. Еще непонятно почему это должно работать быстрее, по крайней мере чтение файлов.
У меня вопрос. Когда массив buffer заполняется под завязку байтами (или символами), то как он очищается? автоматически, я так понимаю? как только записалось методом write(), то происходит обнуляция, поэтому в цикле стоит второй аргумент метода write(), 0, типо, это неважно, если массив изначально заполнился полность? А если в какой-то момент не заполнится полностью, то как это выяснить, отследить и стоит ли писать код в цикле, упреждающий эту ситуацию, дописывая в аргументе точную цифру (хотя я не знаю, как на нее выйти). несколько этот момент хотелось бы прояснить.
Массив не очищается, но заполняется новыми данными.. Когда считываются байты через read возвращается количество реально считаных байтов. Значит в массиве надо взять байты начиная с элемента 0 и до элемента, который равен числу считанных байтов. Вот собственно и все.
@@Daniel-mo1iy Многие моменты очень хорошо поданы, начальные главы например. Но некоторые не очень, например где они вводят в пример какие то библиотеки, или перегружают пример информацией. Я бы рекомендовал эту книгу, но нужно и другие источники использовать. Например некоторые примеры для меня лучше в Википедии поданы.
Неправильно понимаете. Первый байт считывает ДО цикла. И если он считался. то мы заходим в цикл обработки и в конце него снова считываем байт. И если он считался, то цикл повторяется для вновь считанного байта. И снова в конце считываем и пытаемся продолжить цикл только если байт считался. И т.д.. Учитесь читать код - это крайне важный навык.
Судя по всему - я действительно допустил ошибку. Спасибо за замечание. Исправить уже не получится. К сожалению. Но для варианта чтения блоками по идее все правильно.
Единственное, что никак не пойму, почему мы ссылки на объекты (FileInputStream, FileOutputStream и тп. с классами, работающими с символами) кладем в абстрактный класс?
Почитайте про полиморфизм. Я могу использовтаь ссылку абстрактоного класса для указания на объект подкласса. Простыми словами - я могу собакой называть и добермана, и овчарку, и пуделя. Если мне важно, что это собака, а не конкретная порода.
спасибо. хороший webinar. подскажите пожалуйста как в NetBeans включить всплывающие Tooltips, которые показывают все конструкры при наведении на код. долго гуглил, но кроме разного набора Hints (что не совсем то) ничего не нашлось.
@@java8599 например на 34:50 секунде видео. когда вы создаёте новый объект new InputStreamReader(). в всплывающем окне показаны 4 возможных конструктора этого класса. как я не наводил мышку, и не настраивал Hints в меню Tools\Options\Editor у NetBeans, - у меня такая подсказка не всплывает. уже подумал, возможно это зависит от реализации JVM; я на Windows, а не на Mac-e.
Спасибо Антон. Скажите пожалуйста, может ли метод SocketChannel.write(ByteBuffer) писать серверу по внешней сети без задержек или с задержками меньше 100мс? У меня почему то в моем простом тесте при передаче буфера размером 1024 byte за минуту клиент выдает 10-20 задержек по 125-200мс, это я что то не так написал или этот метод так и работает?
Я представил это (NIO) как резервуары с водой, может поможет кому. Вопрос, чтобы работать со строками, нужно разобраться с CharBufer или есть более простое решение. Мне просто нужно в txt файле искать строку, потом производить с ней изменения и уже потом пересоздать файл.
А зачем в примере с NIO и Channel второй буфер? Что мешает написать: int r = inChannel.read(bb); while (r != -1) { bb.flip(); outChannel.write(bb); bb.clean(); r = inChannel.read(bb); }
Теперь я знаю как пылесос затягивает и с каким звуком, если у него есть труба ua-cam.com/video/r9paa9AJ7Gk/v-deo.htmlsi=4IoR7gS6quAtQvdY&t=2480 А так лекция ужасно душная. Объясняет плохо. Не знаю чего все с JR рекомендуют его.
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
Спасибо
Передаю привет всем будущим поколениям джавараша)
Большое спасибо. Пришёл с Джавараш от комментария Миши Зефира. Посмотерл кусок - реально всё стало понятнее, начал решать задачи
Я тоже с Javarush)
Отлично объясняете.
Я студент Javarush University, и даже несмотря на дополнительные видео курса, прояснилось только после вашего объяснения.
Я уже было отчаялся, честное слово. Спасибо вам!
Вот что называется опытный программист:) Столько нюансов!!! Спасибо Вам!!!
Не первый раз смотрю видео Антона, вот реально получаю эстетическое удовольствие от грамотной речи человека, знания , конечно, тоже на высоте, но эта интеллигентность речи, это нечто!!!
На сколько я знаю - не обязательно вызывать close() для всех потоков, достаточно для последнего (или даже для любого, поправьте кто знает).
Автору спасибо, все разложилось по полочкам.
Проходил курс на javaRush и вот эту тему не понял полностью после 6 лекций. Пришлось самостоятельно искать в интернете и это видео сильно помогло в понимании. Спасибо, автор!)
кстати тоже на джавараше особо не понял, у меня такая каша началась после этого, надеюсь это видео поможет
стал программистом?
@@Zhake1993 Стал программистом?
@@nubex2857 да мне кажется рановато ещё на разраба , спустя лишь примерно 8 мес? если ток джуном где нибудь
@@LoveSneakerPimps это не лишь, а уже. Лучше идти джуном, чем дальше учиться
Без спешки, спокойно и доходчиво. Спасибо. Буду всем советовать!
Благодарю за краткость и доступность.
наконец то нашел хорошее видео по этой теме, спасибо большое
Спасибо! Очень нравится, как вы объясняете.
Спасибо! Очень информативная и понятная лекция.
Супер лекции
Круто объясняешь
спасибо вам большое за лекцию. все очень понятно изложено.
Дядь , спасибо ) все четко по делу. + в карму тебе
Большое спасибо!
Спасибо за данный вебинар!
Антон, я уже писал про звук. Вот хотел показать, где особо заметна проблема звука. Слышите как на 2:47 прорывается слово "как"? Или с 6:28 звук из громкого превратился в тихий за 6 секунд. И так на протяжении всего видео. Громкость сигнала постоянно меняется(плохо реализованный программный компрессор пытается регулировать громкость поступающего звукового сигнала).
Я в данном случае не мог вообще управлять уровнем - это запись на базе системы вебинаров. Они такого рода звуковые настройки не давали регулировать.
А вручную искать и выправлять - слишком много времени. Не вижу смысла.
@@java8599 ну это на вашей стороне происходит. Гарнитура какая-то чувствительная что ли.
Куда ее втыкаете, кстати? У вас в ПК есть гнездо как в мобильниках для гарнитур? Или у вас специальные наушники с микрофоном у которых 2 штекера надо подтыкать?
@@Дмитрий-ю9к3г Нет, это не происходило на моей стороне - звук считывался программой для вебинаров сразу с микрофона и напрямую пересылался на сервер провайдера. Никаких настроек на моем компьютере эта программа не предоставляла. Так что увы. Именно этот цикл вебинаров не мог быть сразу обработан по звуку.
А потом делать обработку слишком затратно по времени. Я же не на звукорежиссера учился :)
@@java8599 подробностей не узнал. Но представляя ситуацию дальше, могу предположить, что вы или громко говорите, что в аппаратной части уже звук давится или сам микрофон близко ко рту расположен. Может быть в самой гарнитуре что-то зашито или она просто не качественная. Или ОСь как-то косячно принимает звук. Ну, в общем я уверен на 99%, что на это можно повлиять действиями именно с вашей стороны.
@@java8599 не хотелось бы, чтобы показалось, будто я предъявы кидаю) Просто озвучиваю, то что невольно вижу(слышу). Может захотите прокачать эту сторону канала.
Не понял зачем второй выходной буфер, вроде прикол же как раз в том, что можем флипать его и переключать режимы чтения/записи. То есть также как в io с массивом байт, только здесь нам не нужно помнить сколько байт мы прочитали.
Еще непонятно почему это должно работать быстрее, по крайней мере чтение файлов.
У меня вопрос. Когда массив buffer заполняется под завязку байтами (или символами), то как он очищается? автоматически, я так понимаю? как только записалось методом write(), то происходит обнуляция, поэтому в цикле стоит второй аргумент метода write(), 0, типо, это неважно, если массив изначально заполнился полность? А если в какой-то момент не заполнится полностью, то как это выяснить, отследить и стоит ли писать код в цикле, упреждающий эту ситуацию, дописывая в аргументе точную цифру (хотя я не знаю, как на нее выйти). несколько этот момент хотелось бы прояснить.
Массив не очищается, но заполняется новыми данными.. Когда считываются байты через read возвращается количество реально считаных байтов. Значит в массиве надо взять байты начиная с элемента 0 и до элемента, который равен числу считанных байтов. Вот собственно и все.
@@java8599 здорово, благодарю! Это все, что мне хотелось прояснить (>▽
Огромное спасибо!!!! Все понятно. Видео очень помогло!
В книге "Head First Паттерны проектирования. 2022г"
есть неплохой пример работы с IO в главе про декоратор
доброго времени суток. вы бы посоветовали данную книгу новичкам? (в java).
@@Daniel-mo1iy Многие моменты очень хорошо поданы, начальные главы например. Но некоторые не очень, например где они вводят в пример какие то библиотеки, или перегружают пример информацией. Я бы рекомендовал эту книгу, но нужно и другие источники использовать. Например некоторые примеры для меня лучше в Википедии поданы.
Шикарно! Спасибо!!!
в 2017 году люди не умели записывать видео с компьютера?)
а еще мак и быстрый диск)
видео информативное+
Я не понимаю, почему в цикле while сначала записываете, а потом читаете? 17:34 и 26:17. Мы же последний байт теряем, если я все правильно понимаю.
Неправильно понимаете. Первый байт считывает ДО цикла. И если он считался. то мы заходим в цикл обработки и в конце него снова считываем байт. И если он считался, то цикл повторяется для вновь считанного байта. И снова в конце считываем и пытаемся продолжить цикл только если байт считался. И т.д..
Учитесь читать код - это крайне важный навык.
@@java8599 да, затупил. Просто проверку по-другому всегда реализовывал. С помощью готовых методов, типа ready().
13:56. Т.е. получается, что самый первый байт мы не запишем в новый файл)))
Судя по всему - я действительно допустил ошибку. Спасибо за замечание. Исправить уже не получится. К сожалению. Но для варианта чтения блоками по идее все правильно.
@@java8599 спасибо Вам за ваш труд! У вас отличные материалы и, безусловно, талант к преподаванию.
Здравствуйте. А будет ли видео про разницу SQL и NonSQL? В чём суть NonSQL?
Для начала можно посмотреть вот это видео: ua-cam.com/video/7Cx40sUIyMQ/v-deo.html
Изучаем Java я смотрел. Благодарю. Я вам тот же самый вопрос задал в комментариях под ним).
Я так понял, вопрос - в чем суть NoSQL ?
Изучаем Java да, именно. Хотелось бы знать.
Единственное, что никак не пойму, почему мы ссылки на объекты (FileInputStream, FileOutputStream и тп. с классами, работающими с символами) кладем в абстрактный класс?
Почитайте про полиморфизм. Я могу использовтаь ссылку абстрактоного класса для указания на объект подкласса.
Простыми словами - я могу собакой называть и добермана, и овчарку, и пуделя. Если мне важно, что это собака, а не конкретная порода.
спасибо. хороший webinar.
подскажите пожалуйста как в NetBeans включить всплывающие Tooltips, которые показывают все конструкры при наведении на код. долго гуглил, но кроме разного набора Hints (что не совсем то) ничего не нашлось.
Что значит "показывают все конструкторы при наведении на код" ? Это о чем ?
@@java8599 например на 34:50 секунде видео. когда вы создаёте новый объект new InputStreamReader(). в всплывающем окне показаны 4 возможных конструктора этого класса.
как я не наводил мышку, и не настраивал Hints в меню Tools\Options\Editor у NetBeans, - у меня такая подсказка не всплывает. уже подумал, возможно это зависит от реализации JVM; я на Windows, а не на Mac-e.
@@AndreiPadikk Так это не список конструкторов, а список возможных входных параметров. По-моему Ctrl-P. Не помню точно - давно не пользуюсь NetBeans.
@@java8599 да, точно, Ctrl-P. спасибо. (Int.Idea как-то более friendly))
@@AndreiPadikk а ничего что в IDEA точно также Ctrl+P?))))
Вот интересно, у меня когда буфер опустошается то его размер = 0, т.е. проверка работает только когда while (r!=0){
Спасибо, очень помог!
А в чем NIO не блокирующий то?
ведь все строчки кода же последовательно будут исполняться.
Это же не JS где есть async await
А многопоточный вариант рассматривался ?
Не я в том плане что его неблокируемость заключается в повышении производительности?
Но все операции все равно идут одна за одной?
Большое спасибо за проделанную работу. Вроде знаком, а все же, некоторые моменты новые увидел, да и память освежил.
Спасибо Антон. Скажите пожалуйста, может ли метод SocketChannel.write(ByteBuffer) писать серверу по внешней сети без задержек или с задержками меньше 100мс? У меня почему то в моем простом тесте при передаче буфера размером 1024 byte за минуту клиент выдает 10-20 задержек по 125-200мс, это я что то не так написал или этот метод так и работает?
звук ОК(( Но очень хороший материал.
лютый + в карму
четко
Я представил это (NIO) как резервуары с водой, может поможет кому.
Вопрос, чтобы работать со строками, нужно разобраться с CharBufer или есть более простое решение.
Мне просто нужно в txt файле искать строку, потом производить с ней изменения и уже потом пересоздать файл.
Досмотрел видео, сделаю через .nio.File.Files.
Отличное видео. Но блин, чувак, что у тебя с микрофоном? Чего он так орет периодически?
вы издеваетесь, а где Scanner ???? Шо за нафиг???
Как сказал Козьма Прутков - нельзя объять необъятное.
Если считаете, что Scanner очень важная вещь - сделайте свой вебинар или свое видео.
Как же ты бесишь своими прилагательными (красивенький, миленький)...
точно лишней слащавой пурги много
а по мне норм
Скажи спасибо за инфу.
Не выебывайся, тебе тут лекцию отличную предоставили бесплатно
Это синтаксический сахар.
Спасибо за отличную лекцию!
А зачем в примере с NIO и Channel второй буфер? Что мешает написать:
int r = inChannel.read(bb);
while (r != -1) {
bb.flip();
outChannel.write(bb);
bb.clean();
r = inChannel.read(bb);
}
Теперь я знаю как пылесос затягивает и с каким звуком, если у него есть труба ua-cam.com/video/r9paa9AJ7Gk/v-deo.htmlsi=4IoR7gS6quAtQvdY&t=2480
А так лекция ужасно душная. Объясняет плохо. Не знаю чего все с JR рекомендуют его.