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
Не первый раз смотрю видео Антона, вот реально получаю эстетическое удовольствие от грамотной речи человека, знания , конечно, тоже на высоте, но эта интеллигентность речи, это нечто!!!
На сколько я знаю - не обязательно вызывать close() для всех потоков, достаточно для последнего (или даже для любого, поправьте кто знает). Автору спасибо, все разложилось по полочкам.
Проходил курс на javaRush и вот эту тему не понял полностью после 6 лекций. Пришлось самостоятельно искать в интернете и это видео сильно помогло в понимании. Спасибо, автор!)
Судя по всему - я действительно допустил ошибку. Спасибо за замечание. Исправить уже не получится. К сожалению. Но для варианта чтения блоками по идее все правильно.
@@Daniel-mo1iy Многие моменты очень хорошо поданы, начальные главы например. Но некоторые не очень, например где они вводят в пример какие то библиотеки, или перегружают пример информацией. Я бы рекомендовал эту книгу, но нужно и другие источники использовать. Например некоторые примеры для меня лучше в Википедии поданы.
Антон, я уже писал про звук. Вот хотел показать, где особо заметна проблема звука. Слышите как на 2:47 прорывается слово "как"? Или с 6:28 звук из громкого превратился в тихий за 6 секунд. И так на протяжении всего видео. Громкость сигнала постоянно меняется(плохо реализованный программный компрессор пытается регулировать громкость поступающего звукового сигнала).
Я в данном случае не мог вообще управлять уровнем - это запись на базе системы вебинаров. Они такого рода звуковые настройки не давали регулировать. А вручную искать и выправлять - слишком много времени. Не вижу смысла.
@@java8599 ну это на вашей стороне происходит. Гарнитура какая-то чувствительная что ли. Куда ее втыкаете, кстати? У вас в ПК есть гнездо как в мобильниках для гарнитур? Или у вас специальные наушники с микрофоном у которых 2 штекера надо подтыкать?
@@user-fr2dw3qd4v Нет, это не происходило на моей стороне - звук считывался программой для вебинаров сразу с микрофона и напрямую пересылался на сервер провайдера. Никаких настроек на моем компьютере эта программа не предоставляла. Так что увы. Именно этот цикл вебинаров не мог быть сразу обработан по звуку. А потом делать обработку слишком затратно по времени. Я же не на звукорежиссера учился :)
@@java8599 подробностей не узнал. Но представляя ситуацию дальше, могу предположить, что вы или громко говорите, что в аппаратной части уже звук давится или сам микрофон близко ко рту расположен. Может быть в самой гарнитуре что-то зашито или она просто не качественная. Или ОСь как-то косячно принимает звук. Ну, в общем я уверен на 99%, что на это можно повлиять действиями именно с вашей стороны.
@@java8599 не хотелось бы, чтобы показалось, будто я предъявы кидаю) Просто озвучиваю, то что невольно вижу(слышу). Может захотите прокачать эту сторону канала.
У меня вопрос. Когда массив buffer заполняется под завязку байтами (или символами), то как он очищается? автоматически, я так понимаю? как только записалось методом write(), то происходит обнуляция, поэтому в цикле стоит второй аргумент метода write(), 0, типо, это неважно, если массив изначально заполнился полность? А если в какой-то момент не заполнится полностью, то как это выяснить, отследить и стоит ли писать код в цикле, упреждающий эту ситуацию, дописывая в аргументе точную цифру (хотя я не знаю, как на нее выйти). несколько этот момент хотелось бы прояснить.
Массив не очищается, но заполняется новыми данными.. Когда считываются байты через read возвращается количество реально считаных байтов. Значит в массиве надо взять байты начиная с элемента 0 и до элемента, который равен числу считанных байтов. Вот собственно и все.
Спасибо Антон. Скажите пожалуйста, может ли метод SocketChannel.write(ByteBuffer) писать серверу по внешней сети без задержек или с задержками меньше 100мс? У меня почему то в моем простом тесте при передаче буфера размером 1024 byte за минуту клиент выдает 10-20 задержек по 125-200мс, это я что то не так написал или этот метод так и работает?
Единственное, что никак не пойму, почему мы ссылки на объекты (FileInputStream, FileOutputStream и тп. с классами, работающими с символами) кладем в абстрактный класс?
Почитайте про полиморфизм. Я могу использовтаь ссылку абстрактоного класса для указания на объект подкласса. Простыми словами - я могу собакой называть и добермана, и овчарку, и пуделя. Если мне важно, что это собака, а не конкретная порода.
Неправильно понимаете. Первый байт считывает ДО цикла. И если он считался. то мы заходим в цикл обработки и в конце него снова считываем байт. И если он считался, то цикл повторяется для вновь считанного байта. И снова в конце считываем и пытаемся продолжить цикл только если байт считался. И т.д.. Учитесь читать код - это крайне важный навык.
спасибо. хороший webinar. подскажите пожалуйста как в NetBeans включить всплывающие Tooltips, которые показывают все конструкры при наведении на код. долго гуглил, но кроме разного набора Hints (что не совсем то) ничего не нашлось.
@@java8599 например на 34:50 секунде видео. когда вы создаёте новый объект new InputStreamReader(). в всплывающем окне показаны 4 возможных конструктора этого класса. как я не наводил мышку, и не настраивал Hints в меню Tools\Options\Editor у NetBeans, - у меня такая подсказка не всплывает. уже подумал, возможно это зависит от реализации JVM; я на Windows, а не на Mac-e.
Я представил это (NIO) как резервуары с водой, может поможет кому. Вопрос, чтобы работать со строками, нужно разобраться с CharBufer или есть более простое решение. Мне просто нужно в txt файле искать строку, потом производить с ней изменения и уже потом пересоздать файл.
А зачем в примере с NIO и Channel второй буфер? Что мешает написать: int r = inChannel.read(bb); while (r != -1) { bb.flip(); outChannel.write(bb); bb.clean(); r = inChannel.read(bb); }
Теперь я знаю как пылесос затягивает и с каким звуком, если у него есть труба ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-r9paa9AJ7Gk.htmlsi=4IoR7gS6quAtQvdY&t=2480 А так лекция ужасно душная. Объясняет плохо. Не знаю чего все с JR рекомендуют его.