alishev спасибо. У меня есть вопрос. Допустим до того как добавить длину массива с помощью writeint(), я добавил еще 2 значения int. Тогда если я буду читать с помощью readint(), откуда знать какое именно интовое значение вернется. А если этот число не будет длина массива?
Почему-то всегда когда начинал читать что-то про сериализацию - она казалась дико сложным процессом. А тут в видео всё легко и понятно, без лишней воды. Спасибо.
@@vandametropolitano3944 Вода в тексте - это относительный показатель концентрации слов без смысловой нагрузки (стоп-слов). Слишком большой процент указывает на низкое качество материала.
Наиль, привет. Закрывать поток в блоке try не очень хорошо, ведь если произойдет исключение, то до закрытия потока может не дойти. Поэтому лучше бы закрыть поток в блоке finally добавив условие если поток не равен null то закрываем. Хотя это наверно было не к месту, так как в уроке ты хотел показать не про исключения , а про сериализацию. Урок очень классный сделал, все предельно понятно и интересно!
Почему мы в первый раз(timer 4:15) в цикле кастим до (Person)---> people [i] = (Person) ois.readObject(); A второй раз(timer 7:01)кастим до (Person[]) --> Person[] people = (Person[]) ois.readObject(); Мы же в обоих случаях считываем массив, почему в первом случае мы не сможем закастить до Person[]?
То есть если писать объекты не массивом, а один за другим, то они будут перезаписываться и прежние исчезнут? Как тогда поступить, если у меня сразу нет всех элементов массива, а лишь один объект каждый раз, но мне нужно добавлять из файл, чтобы потом читать оттуда?
ДОбрый день! Хотел бы уточнить. Я смотрю ваши видео, шикарно. слов нет, всё понимаю а когда стараюсь делать задачки которые есть у вас на курсе то они мне кажутся сложными. Я их смотрю и учусь, анализирую конечно но у меня внутри появляется такой страх мол я не учусь или не понимаю хорошо. Это нормально?
а если у нас в файле будут записаны еще некоторые int значения, как Java определит что наш ois.readInt(); должен вернуть количество, а не другие инты, которые будут в файле?
Почему мы в первый раз(timer 4:15) в цикле кастим до (Person)---> people [i] = (Person) ois.readObject(); A второй раз(timer 7:01)кастим до (Person[]) --> Person[] people = (Person[]) ois.readObject(); Мы же в обоих случаях считываем массив, почему в первом случае мы не сможем закастить до Person[]?
в первом случае мы сначала пишем число обьектов в массиве и поочередно записываем их в файл(foreach циклом). Во втором случае мы записываем сразу весь массив как один обьект
Всё! Понял Мы записываем длину массива в файл, а в ридере считываем её и подставляем значение в цикл А что если записать несколько значений, как Java разберется что куда подставлять?
в первом случае, когда записываем обьекты через for reach. в предыдущем видео закрывали поток oos.close; а в этом закрываем fos.close; почему? что-то я запутался
занятный и простой способ записи чтения, пришёлся мне очень по душе, с одномерными массивами все как часы работает, однако по какой то причине не удаётся записать простенький двумерный массив int 2 на 2 ошибок никаких не выдает, только при чтении рандомный набор символов
Не могу запустить метод класса ReadObject , ругается на вот эту строчку people[i] = (Person) ois.readObject(); И пишет : Exception in thread "main" java.lang.ClassCastException: class [LPerson; cannot be cast to class Person ([LPerson; and Person are in unnamed module of loader 'app')
Респект и уважуха за уроки ;) А про парсинг и регулярные выражения не планируете сделать уроки? Просмотрел много уроков, тяжело усваивается, не то что после ваших уроков!
Добрый день! после идентичных манипуляций с массивами - не отрабатывает код(Error running 'WriteToObject': unable to create native thread: possibly out of memory or process/resource limits reached). Встречалась кому-нибудь такая ошибка с памятью?
ты что, если пахать 8 часов без перерыва, потом ломаешься! лучше по 4-5 часов, чем сразу 8. это касается и изучения языков. рывок давать конечно прикольно, но мозги потом гасятся.
В последнее время у меня мозг слегка расплавленный, один ролик посмотреть целое дело Смотрю на одну точку или ухожу в свои мысли И это несмотря на то что я напрягался всего по 1.5-2 часа в день, это нормально или что-то непоправимое происходит?
@@Частныйсектор-х4я Ааа, а то мне начало казаться что я инвалид, 15 минутным роликом так долго маяться... Это в последнее время такая тенденция (война, постковид, зима) или всегда такое периодически со всеми происходит?
@@leoatrox7758 да стресс от войны давит и на меня, хотя я в России живу. Но рост цен, мобилизации, дают сильный стресс. Хочется мира и тепла)) Ролики джава лезут тяжело, потому что это всё концентрат, я с осени учусь, бывает возвращаюсь и смотрю заново, потому что сижу в группе джава курсов в телегами. Нас там учат хорошо, но доп материал, беру в Ютюбе. Ещё и на стек Овер флоу ходить стал.
Тоже остался вопрос про ois.close(); fis.close(); oos.close(); oos.close(); Что из этого и когда требуется? В С++ помню надо было проверять, есть ли файл, не забывать все закрыть после использования и в конце память подчистить. в Java пока непонятно.
Код идентичный Вашему, но при чтении - java.io.EOFException at java.io.DataInputStream.readInt(DataInputStream.java:392) at java.io.ObjectInputStream$BlockDataInputStream.readInt(ObjectInputStream.java:3139) at java.io.ObjectInputStream.readInt(ObjectInputStream.java:1023) at FileSave.SaveObject.MassiveSave.ReadObject.main(ReadObject.java:14)
@@BitkinaEng если эту строку удалить, то как массив создать тогда? Возможно он вместо writeInt написал writeObject. По крайней мере я так сделал и минут 10 искал в чем проблема
А закрывать надо и fis, и ois, и fos, и oos? Просто у вас в примерах заметил, что закрыты только по одному из стримов, в одной файл стрим, в другом аутпут стрим.
Наиль, все классно конечно, но в конце Вы говорите если остались вопросы - задавайте, у меня остался - что нужно сделать, чтобы в файле в который мы сохраняем массив эта информация имела читабельный вид? Заранее спасибо.
Подскажите пожалуйста, почему в первом варианте в консоль выводит такое, а не весь массив сразу, это особенность версии Intellij или я мог что-то не так написать? [Sven: 22, null, null] [Sven: 22, Lina: 12, null] [Sven: 22, Lina: 12, Void: 30] PS. Спасибо за уроки!
Почему при записи мы используем цикл each - for, а при чтении обычный for? Почему нельзя использовать each - for и там, и там? Тогда и значение длинны массива выводить отдельно не нужно было бы. Очень спешно подан урок, хотя всего 8 минут. Можно было бы растянуть в два раза, но объяснить, может быть, повторно, что-то. Все таки учим не самые простые вещи, и усваиваются они не так быстро)
Товарищи! Для тех, у кого выпадает ошибка: ClassCastException, я с помощью шаманского бубна обнаружил, что надо вместо массива с типом данных Person писать Object[] people = new Person[personCount]; Затем в самом цикле даункастить в (Object[]). Тогда при запуске все правильно считывается. UPD: Была найдена мной моя ошибка в классе WriteObject: В цикле foreach в строке oos.writeObject(person); я написал в скобках вместо person - people И всё заработало как на видео. Просто моя невнимательность
Регистрируйтесь на курс "Продвинутая Java": ua-cam.com/video/rRe1vT0SDD8/v-deo.html
Практикуйтесь в написании Java кода: java-marathon.tilda.ws
alishev спасибо. У меня есть вопрос. Допустим до того как добавить длину массива с помощью writeint(), я добавил еще 2 значения int. Тогда если я буду читать с помощью readint(), откуда знать какое именно интовое значение вернется. А если этот число не будет длина массива?
С видео какие-то проблемы - зависает.
@@einoharanen6828 отсутствуют качество 760p и 480 поэтому при попытке перейти на него подвисает. Смотрите на 1080 или 360 (это правда сомнительно)
спасибо за ваши уроки, одни из самых лучших в русскоязычном сегменте!
+
Пожалуйста!)
Мужик, запили еще видосы! у тебя хорошо получатся объяснять.
да но надо смотреть и английские уроки, иначе не понятно почему есть выражения "метод" "обьект" и тд, это все англицизмы, и тогда понимаешь уже.
Почему-то всегда когда начинал читать что-то про сериализацию - она казалась дико сложным процессом. А тут в видео всё легко и понятно, без лишней воды. Спасибо.
причем тут слово "вода"? Воды никогда не будет лишним!
@@vandametropolitano3944 Вода в тексте - это относительный показатель концентрации слов без смысловой нагрузки (стоп-слов). Слишком большой процент указывает на низкое качество материала.
Наиль, благодарю за доступность!
Очень приятно слушать!
У тебя однозначно талант 👍
Очень полезный канал.
Наиль, привет. Закрывать поток в блоке try не очень хорошо, ведь если произойдет исключение, то до закрытия потока может не дойти. Поэтому лучше бы закрыть поток в блоке finally добавив условие если поток не равен null то закрываем.
Хотя это наверно было не к месту, так как в уроке ты хотел показать не про исключения , а про сериализацию. Урок очень классный сделал, все предельно понятно и интересно!
Почему мы в первый раз(timer 4:15) в цикле кастим до (Person)---> people [i] = (Person) ois.readObject();
A второй раз(timer 7:01)кастим до (Person[]) --> Person[] people = (Person[]) ois.readObject();
Мы же в обоих случаях считываем массив, почему в первом случае мы не сможем закастить до Person[]?
@@DolphinArtem в первый раз считывается, не массив, а элемент массива, который как раз типа Person
Доброго времени суток! Благодарю за видео!
Можно Вас попросить записать лекцию о рекурсивных функциях(методах) и их применении? Спасибо!
Ок, скоро будет!
Тык тык))) И все))) Классно, Спасибо за урок
спасибо за урок, второй способ мне больше понравился)
Спасибо вам, человек!
Отличный урок ! Огромное спасибо!
И снова благодарю за информацию!
То есть если писать объекты не массивом, а один за другим, то они будут перезаписываться и прежние исчезнут?
Как тогда поступить, если у меня сразу нет всех элементов массива, а лишь один объект каждый раз, но мне нужно добавлять из файл, чтобы потом читать оттуда?
Ты самый лучший. Я тебя люблю.
Почему в классе WriteObject сменилась строка с oos.close() на fos.close()?
В следующем уроке на 11:10 исправление.
Это очень прекрасно.
Благодарю!
большое спасибо!
ДОбрый день!
Хотел бы уточнить.
Я смотрю ваши видео, шикарно. слов нет, всё понимаю а когда стараюсь делать задачки которые есть у вас на курсе то они мне кажутся сложными. Я их смотрю и учусь, анализирую конечно но у меня внутри появляется такой страх мол я не учусь или не понимаю хорошо.
Это нормально?
а если у нас в файле будут записаны еще некоторые int значения, как Java определит что наш ois.readInt(); должен вернуть количество, а не другие инты, которые будут в файле?
Думаю, что она считает первоего целочисленное значение, которое находится в файле.
Почему мы в первый раз(timer 4:15) в цикле кастим до (Person)---> people [i] = (Person) ois.readObject();
A второй раз(timer 7:01)кастим до (Person[]) --> Person[] people = (Person[]) ois.readObject();
Мы же в обоих случаях считываем массив, почему в первом случае мы не сможем закастить до Person[]?
в первом случае мы сначала пишем число обьектов в массиве и поочередно записываем их в файл(foreach циклом). Во втором случае мы записываем сразу весь массив как один обьект
Немного не понял...
Для чего нужно писать oos.writeInt(people.length)
это мы записываем в файл длину массива, так?
Но зачем это нужно?
Всё! Понял
Мы записываем длину массива в файл, а в ридере считываем её и подставляем значение в цикл
А что если записать несколько значений, как Java разберется что куда подставлять?
в первом случае, когда записываем обьекты через for reach. в предыдущем видео закрывали поток oos.close; а в этом закрываем fos.close; почему? что-то я запутался
занятный и простой способ записи чтения, пришёлся мне очень по душе, с одномерными массивами все как часы работает, однако по какой то причине не удаётся записать простенький двумерный массив int 2 на 2
ошибок никаких не выдает, только при чтении рандомный набор символов
хотя видимо дело в arraytostring наверное отображает только строку с одномерными массивами а не сами обьекты
ЗЫ теперь все работает как надо, благодарю за курс
Спасибо
Не могу запустить метод класса ReadObject , ругается на вот эту строчку people[i] = (Person) ois.readObject(); И пишет : Exception in thread "main" java.lang.ClassCastException: class [LPerson; cannot be cast to class Person ([LPerson; and Person are in unnamed module of loader 'app')
погугли ошибку cannot be cast to class are in unnamed module of loader 'app
Респект и уважуха за уроки ;)
А про парсинг и регулярные выражения не планируете сделать уроки? Просмотрел много уроков, тяжело усваивается, не то что после ваших уроков!
Будут скоро.
А предыдущие данные, записанные в файл, стираются при повторной записи в этот файл?
Добрый день! после идентичных манипуляций с массивами - не отрабатывает код(Error running 'WriteToObject': unable to create native thread: possibly out of memory or process/resource limits reached). Встречалась кому-нибудь такая ошибка с памятью?
Запутанно ))), буду пересматривать пока не пойму )) или уже мозг кипит 8 часов без перерыва. Спасибо хороший урок !
ты что, если пахать 8 часов без перерыва, потом ломаешься! лучше по 4-5 часов, чем сразу 8.
это касается и изучения языков. рывок давать конечно прикольно, но мозги потом гасятся.
В последнее время у меня мозг слегка расплавленный, один ролик посмотреть целое дело
Смотрю на одну точку или ухожу в свои мысли
И это несмотря на то что я напрягался всего по 1.5-2 часа в день, это нормально или что-то непоправимое происходит?
@@leoatrox7758 так у всех, мозг сопротивляется, 15 минут ролик смотрим несколько часов. А потом ещё пересматривать будешь.
@@Частныйсектор-х4я Ааа, а то мне начало казаться что я инвалид,
15 минутным роликом так долго маяться...
Это в последнее время такая тенденция (война, постковид, зима) или всегда такое периодически со всеми происходит?
@@leoatrox7758 да стресс от войны давит и на меня, хотя я в России живу. Но рост цен, мобилизации, дают сильный стресс. Хочется мира и тепла))
Ролики джава лезут тяжело, потому что это всё концентрат, я с осени учусь, бывает возвращаюсь и смотрю заново, потому что сижу в группе джава курсов в телегами. Нас там учат хорошо, но доп материал, беру в Ютюбе. Ещё и на стек Овер флоу ходить стал.
Тоже остался вопрос про
ois.close();
fis.close();
oos.close();
oos.close();
Что из этого и когда требуется?
В С++ помню надо было проверять, есть ли файл, не забывать все закрыть после использования и в конце память подчистить. в Java пока непонятно.
сразу после использования!
Можно использовать try с ресурсами и не париться о закрытии
как поставить этому видео сразу 10 лайков...оч классное объяснение,просто снимаю шляпу!
Код идентичный Вашему, но при чтении - java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:392)
at java.io.ObjectInputStream$BlockDataInputStream.readInt(ObjectInputStream.java:3139)
at java.io.ObjectInputStream.readInt(ObjectInputStream.java:1023)
at FileSave.SaveObject.MassiveSave.ReadObject.main(ReadObject.java:14)
EOFException - это про достижение конца файла
или файл пустой, или читаете лишнее
Пришел через 5 лет сказать что ты скорее всего забыл удалить строку:
int personCount = ois.readInt();
Надеюсь ты уже сеньор!
@@BitkinaEng если эту строку удалить, то как массив создать тогда? Возможно он вместо writeInt написал writeObject. По крайней мере я так сделал и минут 10 искал в чем проблема
А закрывать надо и fis, и ois, и fos, и oos? Просто у вас в примерах заметил, что закрыты только по одному из стримов, в одной файл стрим, в другом аутпут стрим.
А почему поток FileInputStream ты закрываешь, а ObjectInputStream - нет? - Это называется цепочка потоков, достаточно закрыть любой из них!
Наиль, все классно конечно, но в конце Вы говорите если остались вопросы - задавайте, у меня остался - что нужно сделать, чтобы в файле в который мы сохраняем массив эта информация имела читабельный вид? Заранее спасибо.
никак, это же бинарный файл
Записывайте с помощью Scanner как строки, тогда будет читабельный вид.
@@alishevN Спасибо.
Когда будут новые уроки?
Подскажите пожалуйста, почему в первом варианте в консоль выводит такое, а не весь массив сразу, это особенность версии Intellij или я мог что-то не так написать?
[Sven: 22, null, null]
[Sven: 22, Lina: 12, null]
[Sven: 22, Lina: 12, Void: 30]
PS. Спасибо за уроки!
Потому что нельзя персонажей доты в массив пихать они должны быть на респе когда трон падает)
Почему при записи мы используем цикл each - for, а при чтении обычный for?
Почему нельзя использовать each - for и там, и там? Тогда и значение длинны массива выводить отдельно не нужно было бы.
Очень спешно подан урок, хотя всего 8 минут. Можно было бы растянуть в два раза, но объяснить, может быть, повторно, что-то. Все таки учим не самые простые вещи, и усваиваются они не так быстро)
Думаю, for each удобен при работе с массивами, а при чтении у нас не массив, а данные из файла.
Будет ли что-нибудь про AWT и Swing?
deprecated)
дальше будет обучение баз данных?
Пока не знаю, думаю над следующими темами.
javaRussia я о будущем
@@xxgrass Он тоже.
5:48
слооожнааа :D
Товарищи! Для тех, у кого выпадает ошибка: ClassCastException, я с помощью шаманского бубна обнаружил, что надо вместо массива с типом данных Person писать Object[] people = new Person[personCount];
Затем в самом цикле даункастить в (Object[]). Тогда при запуске все правильно считывается.
UPD:
Была найдена мной моя ошибка в классе WriteObject:
В цикле foreach в строке oos.writeObject(person);
я написал в скобках вместо person - people
И всё заработало как на видео. Просто моя невнимательность
спасибо