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

Serializacja z ArrayList

0 głosów
1,013 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
2 odpowiedzi 186 wizyt
pytanie zadane 25 maja 2024 w C# przez lukas1231233 Nowicjusz (240 p.)
0 głosów
1 odpowiedź 382 wizyt
pytanie zadane 30 grudnia 2018 w Java przez Ditrix Mądrala (5,650 p.)
0 głosów
1 odpowiedź 173 wizyt
pytanie zadane 30 maja 2017 w Java przez ewazdomu Początkujący (320 p.)

93,427 zapytań

142,421 odpowiedzi

322,649 komentarzy

62,787 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...