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 2 на 2 ошибок никаких не выдает, только при чтении рандомный набор символов
То есть если писать объекты не массивом, а один за другим, то они будут перезаписываться и прежние исчезнут? Как тогда поступить, если у меня сразу нет всех элементов массива, а лишь один объект каждый раз, но мне нужно добавлять из файл, чтобы потом читать оттуда?
Почему мы в первый раз(timer 4:15) в цикле кастим до (Person)---> people [i] = (Person) ois.readObject(); A второй раз(timer 7:01)кастим до (Person[]) --> Person[] people = (Person[]) ois.readObject(); Мы же в обоих случаях считываем массив, почему в первом случае мы не сможем закастить до Person[]?
в первом случае мы сначала пишем число обьектов в массиве и поочередно записываем их в файл(foreach циклом). Во втором случае мы записываем сразу весь массив как один обьект
а если у нас в файле будут записаны еще некоторые int значения, как Java определит что наш ois.readInt(); должен вернуть количество, а не другие инты, которые будут в файле?
Всё! Понял Мы записываем длину массива в файл, а в ридере считываем её и подставляем значение в цикл А что если записать несколько значений, как Java разберется что куда подставлять?
в первом случае, когда записываем обьекты через for reach. в предыдущем видео закрывали поток oos.close; а в этом закрываем fos.close; почему? что-то я запутался
Не могу запустить метод класса 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')
ты что, если пахать 8 часов без перерыва, потом ломаешься! лучше по 4-5 часов, чем сразу 8. это касается и изучения языков. рывок давать конечно прикольно, но мозги потом гасятся.
В последнее время у меня мозг слегка расплавленный, один ролик посмотреть целое дело Смотрю на одну точку или ухожу в свои мысли И это несмотря на то что я напрягался всего по 1.5-2 часа в день, это нормально или что-то непоправимое происходит?
@@Частныйсектор-х4я Ааа, а то мне начало казаться что я инвалид, 15 минутным роликом так долго маяться... Это в последнее время такая тенденция (война, постковид, зима) или всегда такое периодически со всеми происходит?
@@leoatrox7758 да стресс от войны давит и на меня, хотя я в России живу. Но рост цен, мобилизации, дают сильный стресс. Хочется мира и тепла)) Ролики джава лезут тяжело, потому что это всё концентрат, я с осени учусь, бывает возвращаюсь и смотрю заново, потому что сижу в группе джава курсов в телегами. Нас там учат хорошо, но доп материал, беру в Ютюбе. Ещё и на стек Овер флоу ходить стал.
Код идентичный Вашему, но при чтении - 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 искал в чем проблема
ДОбрый день! Хотел бы уточнить. Я смотрю ваши видео, шикарно. слов нет, всё понимаю а когда стараюсь делать задачки которые есть у вас на курсе то они мне кажутся сложными. Я их смотрю и учусь, анализирую конечно но у меня внутри появляется такой страх мол я не учусь или не понимаю хорошо. Это нормально?
Добрый день! после идентичных манипуляций с массивами - не отрабатывает код(Error running 'WriteToObject': unable to create native thread: possibly out of memory or process/resource limits reached). Встречалась кому-нибудь такая ошибка с памятью?
Тоже остался вопрос про ois.close(); fis.close(); oos.close(); oos.close(); Что из этого и когда требуется? В С++ помню надо было проверять, есть ли файл, не забывать все закрыть после использования и в конце память подчистить. в Java пока непонятно.
Респект и уважуха за уроки ;) А про парсинг и регулярные выражения не планируете сделать уроки? Просмотрел много уроков, тяжело усваивается, не то что после ваших уроков!
А закрывать надо и 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": th-cam.com/video/rRe1vT0SDD8/w-d-xo.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 2 на 2
ошибок никаких не выдает, только при чтении рандомный набор символов
хотя видимо дело в arraytostring наверное отображает только строку с одномерными массивами а не сами обьекты
ЗЫ теперь все работает как надо, благодарю за курс
То есть если писать объекты не массивом, а один за другим, то они будут перезаписываться и прежние исчезнут?
Как тогда поступить, если у меня сразу нет всех элементов массива, а лишь один объект каждый раз, но мне нужно добавлять из файл, чтобы потом читать оттуда?
Благодарю!
Почему мы в первый раз(timer 4:15) в цикле кастим до (Person)---> people [i] = (Person) ois.readObject();
A второй раз(timer 7:01)кастим до (Person[]) --> Person[] people = (Person[]) ois.readObject();
Мы же в обоих случаях считываем массив, почему в первом случае мы не сможем закастить до Person[]?
в первом случае мы сначала пишем число обьектов в массиве и поочередно записываем их в файл(foreach циклом). Во втором случае мы записываем сразу весь массив как один обьект
а если у нас в файле будут записаны еще некоторые int значения, как Java определит что наш ois.readInt(); должен вернуть количество, а не другие инты, которые будут в файле?
Думаю, что она считает первоего целочисленное значение, которое находится в файле.
Немного не понял...
Для чего нужно писать oos.writeInt(people.length)
это мы записываем в файл длину массива, так?
Но зачем это нужно?
Всё! Понял
Мы записываем длину массива в файл, а в ридере считываем её и подставляем значение в цикл
А что если записать несколько значений, как Java разберется что куда подставлять?
в первом случае, когда записываем обьекты через for reach. в предыдущем видео закрывали поток oos.close; а в этом закрываем fos.close; почему? что-то я запутался
Не могу запустить метод класса 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
Спасибо
Запутанно ))), буду пересматривать пока не пойму )) или уже мозг кипит 8 часов без перерыва. Спасибо хороший урок !
ты что, если пахать 8 часов без перерыва, потом ломаешься! лучше по 4-5 часов, чем сразу 8.
это касается и изучения языков. рывок давать конечно прикольно, но мозги потом гасятся.
В последнее время у меня мозг слегка расплавленный, один ролик посмотреть целое дело
Смотрю на одну точку или ухожу в свои мысли
И это несмотря на то что я напрягался всего по 1.5-2 часа в день, это нормально или что-то непоправимое происходит?
@@leoatrox7758 так у всех, мозг сопротивляется, 15 минут ролик смотрим несколько часов. А потом ещё пересматривать будешь.
@@Частныйсектор-х4я Ааа, а то мне начало казаться что я инвалид,
15 минутным роликом так долго маяться...
Это в последнее время такая тенденция (война, постковид, зима) или всегда такое периодически со всеми происходит?
@@leoatrox7758 да стресс от войны давит и на меня, хотя я в России живу. Но рост цен, мобилизации, дают сильный стресс. Хочется мира и тепла))
Ролики джава лезут тяжело, потому что это всё концентрат, я с осени учусь, бывает возвращаюсь и смотрю заново, потому что сижу в группе джава курсов в телегами. Нас там учат хорошо, но доп материал, беру в Ютюбе. Ещё и на стек Овер флоу ходить стал.
Код идентичный Вашему, но при чтении - 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 искал в чем проблема
ДОбрый день!
Хотел бы уточнить.
Я смотрю ваши видео, шикарно. слов нет, всё понимаю а когда стараюсь делать задачки которые есть у вас на курсе то они мне кажутся сложными. Я их смотрю и учусь, анализирую конечно но у меня внутри появляется такой страх мол я не учусь или не понимаю хорошо.
Это нормально?
А предыдущие данные, записанные в файл, стираются при повторной записи в этот файл?
Добрый день! после идентичных манипуляций с массивами - не отрабатывает код(Error running 'WriteToObject': unable to create native thread: possibly out of memory or process/resource limits reached). Встречалась кому-нибудь такая ошибка с памятью?
Тоже остался вопрос про
ois.close();
fis.close();
oos.close();
oos.close();
Что из этого и когда требуется?
В С++ помню надо было проверять, есть ли файл, не забывать все закрыть после использования и в конце память подчистить. в Java пока непонятно.
сразу после использования!
Можно использовать try с ресурсами и не париться о закрытии
Респект и уважуха за уроки ;)
А про парсинг и регулярные выражения не планируете сделать уроки? Просмотрел много уроков, тяжело усваивается, не то что после ваших уроков!
Будут скоро.
А закрывать надо и fis, и ois, и fos, и oos? Просто у вас в примерах заметил, что закрыты только по одному из стримов, в одной файл стрим, в другом аутпут стрим.
А почему поток FileInputStream ты закрываешь, а ObjectInputStream - нет? - Это называется цепочка потоков, достаточно закрыть любой из них!
Когда будут новые уроки?
Подскажите пожалуйста, почему в первом варианте в консоль выводит такое, а не весь массив сразу, это особенность версии Intellij или я мог что-то не так написать?
[Sven: 22, null, null]
[Sven: 22, Lina: 12, null]
[Sven: 22, Lina: 12, Void: 30]
PS. Спасибо за уроки!
Потому что нельзя персонажей доты в массив пихать они должны быть на респе когда трон падает)
Наиль, все классно конечно, но в конце Вы говорите если остались вопросы - задавайте, у меня остался - что нужно сделать, чтобы в файле в который мы сохраняем массив эта информация имела читабельный вид? Заранее спасибо.
никак, это же бинарный файл
Записывайте с помощью Scanner как строки, тогда будет читабельный вид.
@@alishevN Спасибо.
как поставить этому видео сразу 10 лайков...оч классное объяснение,просто снимаю шляпу!
Будет ли что-нибудь про AWT и Swing?
deprecated)
5:48
дальше будет обучение баз данных?
Пока не знаю, думаю над следующими темами.
javaRussia я о будущем
@@xxgrass Он тоже.
Почему при записи мы используем цикл each - for, а при чтении обычный for?
Почему нельзя использовать each - for и там, и там? Тогда и значение длинны массива выводить отдельно не нужно было бы.
Очень спешно подан урок, хотя всего 8 минут. Можно было бы растянуть в два раза, но объяснить, может быть, повторно, что-то. Все таки учим не самые простые вещи, и усваиваются они не так быстро)
Думаю, for each удобен при работе с массивами, а при чтении у нас не массив, а данные из файла.
слооожнааа :D
Товарищи! Для тех, у кого выпадает ошибка: ClassCastException, я с помощью шаманского бубна обнаружил, что надо вместо массива с типом данных Person писать Object[] people = new Person[personCount];
Затем в самом цикле даункастить в (Object[]). Тогда при запуске все правильно считывается.
UPD:
Была найдена мной моя ошибка в классе WriteObject:
В цикле foreach в строке oos.writeObject(person);
я написал в скобках вместо person - people
И всё заработало как на видео. Просто моя невнимательность
спасибо