• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Serializacja z ArrayList

Object Storage Arubacloud
0 głosów
905 wizyt
pytanie zadane 25 grudnia 2015 w Java przez pulpet112 Użytkownik (760 p.)

Witam!

Mam problem z serializacja do pliku *.bin. Chcę tam zapisać zawartość ArrayListy, ktora zawiera elemnty zdefiniowanej przeze mnie klasy. W klasie w ktorej tworze owa ArrayListe definiuję metody :

 

 public void Zapisz(String nazwa)throws  FileNotFoundException,IOException{
  
        FileOutputStream fos = new FileOutputStream (nazwa);
        ObjectOutputStream oos =new ObjectOutputStream (fos);
        
        oos.writeObject(this);
        oos.flush();
        oos.close();
    }
    
    public static ObiektyLista Odczytaj(String nazwa) throws FileNotFoundException, IOException, ClassNotFoundException {
        FileInputStream fis  = new FileInputStream(nazwa);
        ObjectInputStream oin = new ObjectInputStream(fis);
        return (ObiektyLista)oin.readObject();
        }

Następnie w głownej klasie tworze sobie obiekt tej listy, nastepnie 3 obiekty, ktore dodaje do ArrayListy i wykonuje serializacje:

lista.Zapisz("zapis.bin");

Nastepnie usuwam 3 z kolei obiekt z ArrayListy. Teraz wykonuje deserializacje:

lista=ObiektyLista.Odczytaj("zapis.bin");

Spodziewam sie ze 3 obiekt, ktory przed chwila zostal usuniety powroci na swoje miejsce, gdyz zapisu dokonałem przed usunieciem. Tak się jednak nie dzieje - przy wyswietlaniu otrzymuje dwa obiekty, bez tego ktory zostal usuniety.

Nie wiem na czym polega problem. Serializacji nie robie pierwszy raz - zawsze to jakos dzialalo dlatego w tym przypadku zrobilem analogicznie zeby nie powiedziec tak samo. Ale cos jest nie tak. 

Dodam jeszcze, ze plik ktory generuje sie po wywolaniu metody .Zapisz() jest jakis dziwny gdyz jego wnetrze wyglada tak: 

¬í sr plik.ObiektyListav.4žó±  xp

Przyznaje ze nie mam pojecia co te wszystkie znacznki oznaczaja w takich plikach, natomiast moge powiedziec tyle, ze gdy robilem serializacje w innych przypadkach, owy plik byl wiekszy, bylo tam po prostu znacznie wiecej tekstu a tutaj tylko tyle. Nie wiem czy to dobrze.

Bardzo proszę o pomoc.

2 odpowiedzi

+1 głos
odpowiedź 26 grudnia 2015 przez Javowiec Pasjonat (21,560 p.)
wybrane 26 grudnia 2015 przez pulpet112
 
Najlepsza

Zauważ, że przy odczycie nie zamykasz strumienia ObjectInputStream.

Powinno być:

public static ObiektyLista Odczytaj(String nazwa) throws FileNotFoundException, IOException, ClassNotFoundException {
    FileInputStream fis  = new FileInputStream(nazwa);
    ObjectInputStream oin = new ObjectInputStream(fis);

    ObiektyLista obiekty = (ObiektyLista)oin.readObject();

    oin.close();

    return obiekty;
}
komentarz 26 grudnia 2015 przez pulpet112 Użytkownik (760 p.)
zmieniłem tak, jak napisałeś ale niestety nic to nie dalo...

program zachowuje sie tak, jaby metoda Odczytaj() po prostu czytala z bierzacej listy a nie z pliku.
komentarz 26 grudnia 2015 przez Javowiec Pasjonat (21,560 p.)
Jak możesz, pokaż kod, który wykonuje opisane przez Ciebie operacje zapisu i odczytu oraz kod całej klasy, w której znajdują się owe metody.
0 głosów
odpowiedź 26 grudnia 2015 przez pulpet112 Użytkownik (760 p.)
Naprawde nikt nie ma pomyslu??

Podobne pytania

0 głosów
1 odpowiedź 325 wizyt
pytanie zadane 30 grudnia 2018 w Java przez Ditrix Mądrala (5,650 p.)
0 głosów
1 odpowiedź 141 wizyt
pytanie zadane 30 maja 2017 w Java przez ewazdomu Początkujący (320 p.)
0 głosów
0 odpowiedzi 144 wizyt
pytanie zadane 17 lutego 2021 w PHP przez mi-20 Stary wyjadacz (13,190 p.)

92,631 zapytań

141,498 odpowiedzi

319,872 komentarzy

62,011 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...