Vai al contenuto

Primario: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Secondario: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Sfondo: Blank Waves Squares Notes Sharp Wood Rockface Leather Honey Vertical Triangles
Corsi di Laurea










ROX @ Unisa - Forum degli studenti di Ingegneria utilizza i cookie. Se prosegui la navigazione accetti il loro uso.    Accetto l'uso dei cookie
-->
Foto

[HELP]differenza tra un file serializzato e non


  • Effettua l'accesso per rispondere
Questa discussione ha avuto 4 risposta/e

#1
orres21

orres21

    Advanced Member

  • Utente
  • StellaStellaStella
  • 270 Messaggi:
Salve a tutti, non riesco a capire qual'è la differenza tra un file serializzato e non, sopratutto dal punto di vista del codice. Se io utilizzo questo metodo per leggere un file normale:


public void caricaFile(String percorso) throws IOException{
FileInputStream fis= new FileInputStream (percorso);
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
String line = "";

while((line = br.readLine())!=null){
StringTokenizer st = new StringTokenizer(line ,";");
String [] parole = new String[st.countTokens()];
int i=0;
while(st.hasMoreTokens()){
parole[i]=st.nextToken();
i++;
}

list.add(new Persona(parole[0],parole[1],parole[2]));
}

fis.close();
isr.close();
br.close();


}



cosa devo fare per leggerne uno serializzato???? cioè sò che la classe deve implementare l'interfaccia Serializable e poi????
GRAZEI A TUTTI!!!!



#2
DeAndreon

DeAndreon

    Advanced Member

  • Utente
  • StellaStellaStella
  • 562 Messaggi:
Il codice da te scritto va bene per leggere a byte poichè usci FileInputStream ed InputStreamReader.
Per leggere un file serializzato, ovvero dove è salvato o sono salvati oggetti (quindi oggetti in un determinato momento cioè con i valori a tempo di esecuzione), bisogna utilizzare ObjectInputStream.
Faccio un esempio:


public Classifica caricaSer(String nomefile){
Classifica c = null;
ObjectInputStream o = null;
try{
o = new ObjectInputStream(new BufferedInputStream(new FileInputStream(nomefile)));
c = (Classifica)o.readObject();

}catch(Exception e){
e.printStackTrace();
return null;
}finally{
try{
o.close();
}catch(Exception e)
{
e.printStackTrace();
return null;
}

}
return c;
}

Nota bene il cast vicino a o.readObject() perchè quando salviamo su file, gli oggetti vengono salvati come Object e non con il tipo proprio. Quindi convertiamo l'oggetto caricato da file nel tipo originario ovvero in quello che avevamo prima di salvarlo. L'oggetto che si salva deve implementare Serializable (come hai detto tu).
E se una struttura dati che è all'interno dell'oggetto Serializable da salvare ha al proprio interno un tipo di oggetto, anche quel tipo di oggetto deve implementare Serializable. Un esempio è la Classifica che a me ha una map dove anche deve essere Serializable altrimenti cadi nell'eccezione.
Spero di esserti stato d'aiuto.


"Sir Daniel Fortesque! In ritorno dalla terra dei morti!"(Winston, l'Assistente Fantasma, al risveglio di Sir Daniel Fortesque).

#3
orres21

orres21

    Advanced Member

  • Utente
  • StellaStellaStella
  • 270 Messaggi:
ciao DeAndreon grazie per la risposta allora io ho fatto in questo modo:

Per il salvataggio:

public void salvaFile(String percorso) throws IOException {

FileOutputStream fos = new FileOutputStream(percorso);
ObjectOutputStream oos = new ObjectOutputStream(fos);

Iterator it;
it = hashMap.values().iterator();
Contatto c;
while(it.hasNext()){
c=it.next();
oos.writeObject(c.getNome()+";"+c.getMail()+";"+c.getTelefono()+"\n");
}


}

e sembri che funzioni.
ora per il caricamento del file, non potendo utilizzare la readLine() di BufferedReader ho il problema di capire quanti record sono inseriti nel file come posso fare?? mi sapresti dire come posso fare...GRAZIE

#4
DeAndreon

DeAndreon

    Advanced Member

  • Utente
  • StellaStellaStella
  • 562 Messaggi:

ciao DeAndreon grazie per la risposta allora io ho fatto in questo modo:

Per il salvataggio:


public void salvaFile(String percorso) throws IOException {

FileOutputStream fos = new FileOutputStream(percorso);
ObjectOutputStream oos = new ObjectOutputStream(fos);

Iterator it;
it = hashMap.values().iterator();
Contatto c;
while(it.hasNext()){
c=it.next();
oos.writeObject(c.getNome()+";"+c.getMail()+";"+c.getTelefono()+"\n");
}


}

e sembri che funzioni.
ora per il caricamento del file, non potendo utilizzare la readLine() di BufferedReader ho il problema di capire quanti record sono inseriti nel file come posso fare?? mi sapresti dire come posso fare...GRAZIE


No, non ci siamo. Così alla fine ti ritrovi di nuovo un file di testo. Tu devi salvare l'oggetto, ovvero il Contatto. Se tu apri un file serializzato troverai simboli incomprensibili che sono invece l'oggetto in memoria. Invece facendo così penso che ti ritrovi in file di testo.
Per fare come hai fatto tu a writeObject() gli devi passare c ovvero il Contatto corrente.
Così con l'iterator si scansiona la hashmap e si mettono gli oggetti Contatto contenuti nella hashmap su file.
Per il caricamento la vedo difficilotta.
Io in genere salvo un oggetto contenente la struttura dati così da caricare un oggetto solo (vedi mio esempio). Così, a caricare i singoli oggetti da file in una struttura non l'ho mai provato. Ci dovrei pensare su...
"Sir Daniel Fortesque! In ritorno dalla terra dei morti!"(Winston, l'Assistente Fantasma, al risveglio di Sir Daniel Fortesque).

#5
orres21

orres21

    Advanced Member

  • Utente
  • StellaStellaStella
  • 270 Messaggi:
qualcuno mi potrebbe aiutare ad implementare il metodo dalla caricaDaFile (serializzato)???? GRAZIE 10000000000




Leggono questa discussione 0 utenti

0 utenti, 0 ospiti, 0 utenti anonimi