Jump to content
tjt

Nelamurire ObjectOutputStream Java.

Recommended Posts

Foloseste PrintWriter sau FileWriter care au metode prin care poti face append.

PrintWriter are metoda println si FileWriter are metoda writeln.

In clasa Scor iti poti face o metoda toString() care sa iti faca un output sub forma de string al scorului, asa cum il doresti tu afisat.

Dupa asta foloseste metoda toString pentru a scrie scorurile in fisier cu FileWriter sau PrintWriter.

Intrebare: De ce vrei sa salvezi scorurile intr-un fisier text? Ca urmatoarea data cand deschizi jocul sa continui cu scorul precedent?

Link to comment
Share on other sites

@um03 si @M2G nu doresc sa folosesc alta metoda ca asa ar fi fost simplu.

Doresc sa folosesc ObjectOutputStream si sa le fac append la continutul deja existent(asta imi este cerinta la proiect).

Vreau sa stiu daca stiti o metoda mai eficienta,pentru ca nu prea cred ca e normal sa preiau de fiecare data cand deschid jocul toate scorurile.

@M2G Urmatoarea data cand deschid jocul scorurile salvate in fisier trebuie clasificate in functie de nume,scor.

De exemplu cei care au nume care incepe cu A si scor intre 13-18 afisati intr-un loc,cei cu nume care incepe cu b si scor 6 afisate intr-un loc,etc.Lucrul asta am reusit sa-l fac intr-o alta clasa.

LE: Nu pot face append simplu ca la fisiere ce contin text,pentru ca obiectele pe care le salvez sunt serializate mai intai,adica sunt sunt transmise ca serie de octeti intr-un anumit format.Eu daca incerc sa fac append fara sa respect formatul anterior nu reusesc sa salvez nimic.O alta varianta care probabil este si mai eficienta este sa incerc sa aflu care este formatul anterior si sa incerc sa-l implementez,dar nu am gasit nimic.

Edited by tjt
Link to comment
Share on other sites

La ObjectOutputStream ideea e sa nu inchizi streamul decat dupa ce ai scris toate obiectele pentru ca ObjectOutputStream scrie un header in fisier. In momentul in care tu faci new ObjectOutputStream se creaza o alta instanta care isi pune si ea headerul. Deci fisierul se suprascrie.

Nu poti sa folosesti mai multe instante de ObjectOutputStream pentru a scrie un fisier pentru ca atunci InputStream-ul nu o sa mai poata sa citeasca.

O ideea pentru a creste performanta ar fii sa nu mai tot scrii si citesti obiecte in for.

Iti faci un arraylist de obiecte Scor si pentru fiecare obiect Scor il adaugi in arraylist.

Scor test = new Scor(bla bla parametrii);

Arraylist<Scor> scores = new Arraylist<Scor>();

scores.Add(scor);

Dupa asta pui pe ObjectOutputStream intreg arraylistul cu obiecte scor in loc sa pui fiecare obiect pe rand.

In momentul in care citesti obiectul din fisier o sa iti returneze un singur obiec de tip arraylist.

Tot ce trebuie sa faci este sa faci Add la noile scoruri in acel array si sa il scrii inapoi in fisier. Astfel va contine vechiile valori + noile valori la care ai dat Add.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...