Java для начинающих. Урок 46: Сериализация (часть 2). Сериализация массивов.

แชร์
ฝัง
  • เผยแพร่เมื่อ 19 ธ.ค. 2024

ความคิดเห็น • 88

  • @alishevN
    @alishevN  7 ปีที่แล้ว +5

    Регистрируйтесь на курс "Продвинутая Java": th-cam.com/video/rRe1vT0SDD8/w-d-xo.html
    Практикуйтесь в написании Java кода: java-marathon.tilda.ws

    • @haykmkrtchyan7093
      @haykmkrtchyan7093 5 ปีที่แล้ว

      alishev спасибо. У меня есть вопрос. Допустим до того как добавить длину массива с помощью writeint(), я добавил еще 2 значения int. Тогда если я буду читать с помощью readint(), откуда знать какое именно интовое значение вернется. А если этот число не будет длина массива?

    • @einoharanen6828
      @einoharanen6828 5 ปีที่แล้ว

      С видео какие-то проблемы - зависает.

    • @toptravelask
      @toptravelask 5 ปีที่แล้ว +1

      @@einoharanen6828 отсутствуют качество 760p и 480 поэтому при попытке перейти на него подвисает. Смотрите на 1080 или 360 (это правда сомнительно)

  • @DrPermyakovTV
    @DrPermyakovTV 7 ปีที่แล้ว +51

    спасибо за ваши уроки, одни из самых лучших в русскоязычном сегменте!

    • @dzmitrykaziuchyts1938
      @dzmitrykaziuchyts1938 7 ปีที่แล้ว

      +

    • @alishevN
      @alishevN  7 ปีที่แล้ว +6

      Пожалуйста!)

    • @ОлександрБорцов
      @ОлександрБорцов 7 ปีที่แล้ว +3

      Мужик, запили еще видосы! у тебя хорошо получатся объяснять.

    • @Частныйсектор-х4я
      @Частныйсектор-х4я 2 ปีที่แล้ว

      да но надо смотреть и английские уроки, иначе не понятно почему есть выражения "метод" "обьект" и тд, это все англицизмы, и тогда понимаешь уже.

  • @largusofdeath
    @largusofdeath 5 ปีที่แล้ว +23

    Почему-то всегда когда начинал читать что-то про сериализацию - она казалась дико сложным процессом. А тут в видео всё легко и понятно, без лишней воды. Спасибо.

    • @vandametropolitano3944
      @vandametropolitano3944 ปีที่แล้ว

      причем тут слово "вода"? Воды никогда не будет лишним!

    • @untake8776
      @untake8776 3 หลายเดือนก่อน

      @@vandametropolitano3944 Вода в тексте - это относительный показатель концентрации слов без смысловой нагрузки (стоп-слов). Слишком большой процент указывает на низкое качество материала.

  • @Devivl
    @Devivl ปีที่แล้ว

    Наиль, благодарю за доступность!
    Очень приятно слушать!
    У тебя однозначно талант 👍

  • @wilyammiller3631
    @wilyammiller3631 ปีที่แล้ว +1

    спасибо за урок, второй способ мне больше понравился)

  • @xsplitgames4138
    @xsplitgames4138 7 ปีที่แล้ว +6

    Очень полезный канал.

  • @ИгорьЧумиков-й5б
    @ИгорьЧумиков-й5б 5 ปีที่แล้ว +2

    Тык тык))) И все))) Классно, Спасибо за урок

  • @Владлен-т4р
    @Владлен-т4р 4 ปีที่แล้ว +6

    Наиль, привет. Закрывать поток в блоке try не очень хорошо, ведь если произойдет исключение, то до закрытия потока может не дойти. Поэтому лучше бы закрыть поток в блоке finally добавив условие если поток не равен null то закрываем.
    Хотя это наверно было не к месту, так как в уроке ты хотел показать не про исключения , а про сериализацию. Урок очень классный сделал, все предельно понятно и интересно!

    • @DolphinArtem
      @DolphinArtem 3 ปีที่แล้ว

      Почему мы в первый раз(timer 4:15) в цикле кастим до (Person)---> people [i] = (Person) ois.readObject();
      A второй раз(timer 7:01)кастим до (Person[]) --> Person[] people = (Person[]) ois.readObject();
      Мы же в обоих случаях считываем массив, почему в первом случае мы не сможем закастить до Person[]?

    • @Das.Kleine.Krokodil
      @Das.Kleine.Krokodil 2 ปีที่แล้ว +3

      @@DolphinArtem в первый раз считывается, не массив, а элемент массива, который как раз типа Person

  • @ВоваШулюмов-з3ь
    @ВоваШулюмов-з3ь 2 ปีที่แล้ว

    Отличный урок ! Огромное спасибо!

  • @blackman852
    @blackman852 3 ปีที่แล้ว

    Ты самый лучший. Я тебя люблю.

  • @Andrzej3935
    @Andrzej3935 3 ปีที่แล้ว

    Спасибо вам, человек!

  • @kladmonet9
    @kladmonet9 4 ปีที่แล้ว

    И снова благодарю за информацию!

  • @tanyaro695
    @tanyaro695 7 ปีที่แล้ว +6

    Доброго времени суток! Благодарю за видео!
    Можно Вас попросить записать лекцию о рекурсивных функциях(методах) и их применении? Спасибо!

    • @alishevN
      @alishevN  7 ปีที่แล้ว +3

      Ок, скоро будет!

  • @mikhaillazarev5378
    @mikhaillazarev5378 2 ปีที่แล้ว

    Это очень прекрасно.

  • @ricciottoinnebbia1333
    @ricciottoinnebbia1333 5 ปีที่แล้ว +8

    Почему в классе WriteObject сменилась строка с oos.close() на fos.close()?

    • @raccoon8230
      @raccoon8230 4 ปีที่แล้ว +1

      В следующем уроке на 11:10 исправление.

  • @halcyon-s
    @halcyon-s ปีที่แล้ว

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

  • @virtualriot4062
    @virtualriot4062 6 ปีที่แล้ว

    занятный и простой способ записи чтения, пришёлся мне очень по душе, с одномерными массивами все как часы работает, однако по какой то причине не удаётся записать простенький двумерный массив int 2 на 2
    ошибок никаких не выдает, только при чтении рандомный набор символов

    • @virtualriot4062
      @virtualriot4062 6 ปีที่แล้ว +1

      хотя видимо дело в arraytostring наверное отображает только строку с одномерными массивами а не сами обьекты

    • @virtualriot4062
      @virtualriot4062 6 ปีที่แล้ว +1

      ЗЫ теперь все работает как надо, благодарю за курс

  • @mmeriant
    @mmeriant 4 ปีที่แล้ว +3

    То есть если писать объекты не массивом, а один за другим, то они будут перезаписываться и прежние исчезнут?
    Как тогда поступить, если у меня сразу нет всех элементов массива, а лишь один объект каждый раз, но мне нужно добавлять из файл, чтобы потом читать оттуда?

  • @Anatoli-bq1pe
    @Anatoli-bq1pe 2 ปีที่แล้ว

    Благодарю!

  • @DolphinArtem
    @DolphinArtem 3 ปีที่แล้ว

    Почему мы в первый раз(timer 4:15) в цикле кастим до (Person)---> people [i] = (Person) ois.readObject();
    A второй раз(timer 7:01)кастим до (Person[]) --> Person[] people = (Person[]) ois.readObject();
    Мы же в обоих случаях считываем массив, почему в первом случае мы не сможем закастить до Person[]?

    • @urninax
      @urninax 2 ปีที่แล้ว +3

      в первом случае мы сначала пишем число обьектов в массиве и поочередно записываем их в файл(foreach циклом). Во втором случае мы записываем сразу весь массив как один обьект

  • @dontknowwhattotypelo
    @dontknowwhattotypelo 6 ปีที่แล้ว +2

    а если у нас в файле будут записаны еще некоторые int значения, как Java определит что наш ois.readInt(); должен вернуть количество, а не другие инты, которые будут в файле?

    • @MrStim
      @MrStim 3 ปีที่แล้ว +2

      Думаю, что она считает первоего целочисленное значение, которое находится в файле.

  • @hazcker5746
    @hazcker5746 6 ปีที่แล้ว +3

    Немного не понял...
    Для чего нужно писать oos.writeInt(people.length)
    это мы записываем в файл длину массива, так?
    Но зачем это нужно?

    • @hazcker5746
      @hazcker5746 6 ปีที่แล้ว +9

      Всё! Понял
      Мы записываем длину массива в файл, а в ридере считываем её и подставляем значение в цикл
      А что если записать несколько значений, как Java разберется что куда подставлять?

  • @alexandrkomar4741
    @alexandrkomar4741 3 ปีที่แล้ว

    в первом случае, когда записываем обьекты через for reach. в предыдущем видео закрывали поток oos.close; а в этом закрываем fos.close; почему? что-то я запутался

  • @morfis_yt
    @morfis_yt 3 ปีที่แล้ว +1

    Не могу запустить метод класса 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')

    • @Das.Kleine.Krokodil
      @Das.Kleine.Krokodil 2 ปีที่แล้ว

      погугли ошибку cannot be cast to class are in unnamed module of loader 'app

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil 2 ปีที่แล้ว

    Спасибо

  • @Temkame
    @Temkame 2 ปีที่แล้ว

    Запутанно ))), буду пересматривать пока не пойму )) или уже мозг кипит 8 часов без перерыва. Спасибо хороший урок !

    • @Частныйсектор-х4я
      @Частныйсектор-х4я 2 ปีที่แล้ว +2

      ты что, если пахать 8 часов без перерыва, потом ломаешься! лучше по 4-5 часов, чем сразу 8.
      это касается и изучения языков. рывок давать конечно прикольно, но мозги потом гасятся.

    • @leoatrox7758
      @leoatrox7758 2 ปีที่แล้ว

      В последнее время у меня мозг слегка расплавленный, один ролик посмотреть целое дело
      Смотрю на одну точку или ухожу в свои мысли
      И это несмотря на то что я напрягался всего по 1.5-2 часа в день, это нормально или что-то непоправимое происходит?

    • @Частныйсектор-х4я
      @Частныйсектор-х4я 2 ปีที่แล้ว

      @@leoatrox7758 так у всех, мозг сопротивляется, 15 минут ролик смотрим несколько часов. А потом ещё пересматривать будешь.

    • @leoatrox7758
      @leoatrox7758 2 ปีที่แล้ว

      @@Частныйсектор-х4я Ааа, а то мне начало казаться что я инвалид,
      15 минутным роликом так долго маяться...
      Это в последнее время такая тенденция (война, постковид, зима) или всегда такое периодически со всеми происходит?

    • @Частныйсектор-х4я
      @Частныйсектор-х4я 2 ปีที่แล้ว

      @@leoatrox7758 да стресс от войны давит и на меня, хотя я в России живу. Но рост цен, мобилизации, дают сильный стресс. Хочется мира и тепла))
      Ролики джава лезут тяжело, потому что это всё концентрат, я с осени учусь, бывает возвращаюсь и смотрю заново, потому что сижу в группе джава курсов в телегами. Нас там учат хорошо, но доп материал, беру в Ютюбе. Ещё и на стек Овер флоу ходить стал.

  • @volodymyrchornyi9389
    @volodymyrchornyi9389 7 ปีที่แล้ว

    Код идентичный Вашему, но при чтении - 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)

    • @Das.Kleine.Krokodil
      @Das.Kleine.Krokodil 2 ปีที่แล้ว +1

      EOFException - это про достижение конца файла
      или файл пустой, или читаете лишнее

    • @BitkinaEng
      @BitkinaEng ปีที่แล้ว +2

      Пришел через 5 лет сказать что ты скорее всего забыл удалить строку:
      int personCount = ois.readInt();
      Надеюсь ты уже сеньор!

    • @ГеоргийТурумтаев
      @ГеоргийТурумтаев 9 หลายเดือนก่อน

      @@BitkinaEng если эту строку удалить, то как массив создать тогда? Возможно он вместо writeInt написал writeObject. По крайней мере я так сделал и минут 10 искал в чем проблема

  • @umaxaxa
    @umaxaxa หลายเดือนก่อน

    ДОбрый день!
    Хотел бы уточнить.
    Я смотрю ваши видео, шикарно. слов нет, всё понимаю а когда стараюсь делать задачки которые есть у вас на курсе то они мне кажутся сложными. Я их смотрю и учусь, анализирую конечно но у меня внутри появляется такой страх мол я не учусь или не понимаю хорошо.
    Это нормально?

  • @АндрейИщук-ю8к
    @АндрейИщук-ю8к 3 ปีที่แล้ว

    А предыдущие данные, записанные в файл, стираются при повторной записи в этот файл?

  • @aleksandrpalenko9931
    @aleksandrpalenko9931 3 ปีที่แล้ว

    Добрый день! после идентичных манипуляций с массивами - не отрабатывает код(Error running 'WriteToObject': unable to create native thread: possibly out of memory or process/resource limits reached). Встречалась кому-нибудь такая ошибка с памятью?

  • @ГеоргийСтародубцев-й8у
    @ГеоргийСтародубцев-й8у 3 ปีที่แล้ว

    Тоже остался вопрос про
    ois.close();
    fis.close();
    oos.close();
    oos.close();
    Что из этого и когда требуется?
    В С++ помню надо было проверять, есть ли файл, не забывать все закрыть после использования и в конце память подчистить. в Java пока непонятно.

  • @alexandrbalichev7463
    @alexandrbalichev7463 7 ปีที่แล้ว +2

    Респект и уважуха за уроки ;)
    А про парсинг и регулярные выражения не планируете сделать уроки? Просмотрел много уроков, тяжело усваивается, не то что после ваших уроков!

    • @alishevN
      @alishevN  7 ปีที่แล้ว +1

      Будут скоро.

  • @r__2__r
    @r__2__r ปีที่แล้ว

    А закрывать надо и fis, и ois, и fos, и oos? Просто у вас в примерах заметил, что закрыты только по одному из стримов, в одной файл стрим, в другом аутпут стрим.

    • @magellan127
      @magellan127 ปีที่แล้ว

      А почему поток FileInputStream ты закрываешь, а ObjectInputStream - нет? - Это называется цепочка потоков, достаточно закрыть любой из них!

  • @АлександрМошкович-ш4ъ
    @АлександрМошкович-ш4ъ 7 ปีที่แล้ว

    Когда будут новые уроки?

  • @Daym0nd
    @Daym0nd 2 ปีที่แล้ว

    Подскажите пожалуйста, почему в первом варианте в консоль выводит такое, а не весь массив сразу, это особенность версии Intellij или я мог что-то не так написать?
    [Sven: 22, null, null]
    [Sven: 22, Lina: 12, null]
    [Sven: 22, Lina: 12, Void: 30]
    PS. Спасибо за уроки!

    • @magellan127
      @magellan127 ปีที่แล้ว

      Потому что нельзя персонажей доты в массив пихать они должны быть на респе когда трон падает)

  • @ШупаеваАнна
    @ШупаеваАнна 3 ปีที่แล้ว

    Наиль, все классно конечно, но в конце Вы говорите если остались вопросы - задавайте, у меня остался - что нужно сделать, чтобы в файле в который мы сохраняем массив эта информация имела читабельный вид? Заранее спасибо.

    • @alishevN
      @alishevN  3 ปีที่แล้ว +5

      никак, это же бинарный файл
      Записывайте с помощью Scanner как строки, тогда будет читабельный вид.

    • @ШупаеваАнна
      @ШупаеваАнна 3 ปีที่แล้ว

      @@alishevN Спасибо.

  • @rozenshtruik
    @rozenshtruik ปีที่แล้ว

    как поставить этому видео сразу 10 лайков...оч классное объяснение,просто снимаю шляпу!

  • @roman.leeway
    @roman.leeway 7 ปีที่แล้ว

    Будет ли что-нибудь про AWT и Swing?

    • @FoxChpoks
      @FoxChpoks 3 ปีที่แล้ว

      deprecated)

  • @sergeyk.2764
    @sergeyk.2764 5 ปีที่แล้ว

    5:48

  • @xxgrass
    @xxgrass 7 ปีที่แล้ว

    дальше будет обучение баз данных?

    • @alishevN
      @alishevN  7 ปีที่แล้ว

      Пока не знаю, думаю над следующими темами.

    • @xxgrass
      @xxgrass 7 ปีที่แล้ว

      javaRussia я о будущем

    • @NiflheimForever
      @NiflheimForever 4 ปีที่แล้ว +1

      @@xxgrass Он тоже.

  • @messalllina
    @messalllina 4 ปีที่แล้ว +1

    Почему при записи мы используем цикл each - for, а при чтении обычный for?
    Почему нельзя использовать each - for и там, и там? Тогда и значение длинны массива выводить отдельно не нужно было бы.
    Очень спешно подан урок, хотя всего 8 минут. Можно было бы растянуть в два раза, но объяснить, может быть, повторно, что-то. Все таки учим не самые простые вещи, и усваиваются они не так быстро)

    • @АлексейТимошенко-л6и
      @АлексейТимошенко-л6и 2 ปีที่แล้ว +1

      Думаю, for each удобен при работе с массивами, а при чтении у нас не массив, а данные из файла.

  • @Артем-о4щ7р
    @Артем-о4щ7р 4 ปีที่แล้ว +1

    слооожнааа :D

  • @semero-kozlyat
    @semero-kozlyat 10 หลายเดือนก่อน

    Товарищи! Для тех, у кого выпадает ошибка: ClassCastException, я с помощью шаманского бубна обнаружил, что надо вместо массива с типом данных Person писать Object[] people = new Person[personCount];
    Затем в самом цикле даункастить в (Object[]). Тогда при запуске все правильно считывается.
    UPD:
    Была найдена мной моя ошибка в классе WriteObject:
    В цикле foreach в строке oos.writeObject(person);
    я написал в скобках вместо person - people
    И всё заработало как на видео. Просто моя невнимательность

  • @jamjam3337
    @jamjam3337 4 หลายเดือนก่อน

    спасибо