Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Reiuky
    Registrato dal
    Jul 2008
    Messaggi
    371

    Un po' di teoria sul Serializable

    Sarà l'ora o sarà che sono 2 mesi su stò programma e non ne vedo la fine , ma...

    Ho bisogno di salvare un array di RecordOrdinativi, dove RecordOrdinativi è una classe creata da me.

    So che si può fare attraverso l'interfaccia seralizable, ma, per quanto legga su internet e sul manuale, non riesco a venirne a capo.

    Intanto: si può memorizzare in un unico file tutto il record? o devo creare un altro oggetto che contiene il record e salvare quest'ultimo?

    Poi, quali metodi devo impelementare, e quali devo chiamare e su quali classi per ottenere di salvare questi dati?

    Vi chiederei anche un esempio chiaro, se non stò chiedendo troppo...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Un po' di teoria sul Serializable

    Originariamente inviato da Reiuky
    Intanto: si può memorizzare in un unico file tutto il record? o devo creare un altro oggetto che contiene il record e salvare quest'ultimo?
    Se hai un array RecordOrdinativi[] puoi serializzare direttamente quello.

    Originariamente inviato da Reiuky
    Poi, quali metodi devo impelementare, e quali devo chiamare e su quali classi per ottenere di salvare questi dati?
    Innanzitutto la tua classe deve essere serializzabile, quindi devi indicare implements Serializable. Serializable è una interfaccia "vuota", non definisce metodi che devi implementare.

    Il solo fatto di dichiarare l'implementazione di Serializable non basta, bisogna anche vedere come è fatta la classe. Ci sono situazioni che impediscono la (de)serializzazione.

    Esempio:
    a) La classe ha variabili di istanza di tipi non serializzabili. Questo generalmente è il primo impedimento alla serializzazione.

    b) La super-classe non è Serializable e non ha un costruttore senza argomenti. Questo impedisce la deserializzazione, non la serializzazione.

    Nel caso a) si può aggirare la cosa rendendo il campo 'transient' ed "entrando" nel flusso della serializzazione implementando i metodi privati writeObject() / readObject() per scrivere esplicitamente lo stato degli oggetti non serializzabili.

    Nel caso b) non si può fare nulla, la prima super-classe non serializzabile deve avere un costruttore senza argomenti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di Reiuky
    Registrato dal
    Jul 2008
    Messaggi
    371
    Uhao!

    Questa potenzialità del java è... fenomenale! Con 3 righe di codice mi sono salvato tutto l'ArrayList e l'ho ricaricato senza alcuna difficoltà.

    grazie andbin. Sei sempre il mio mito ^__^

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Reiuky
    Con 3 righe di codice mi sono salvato tutto l'ArrayList e l'ho ricaricato senza alcuna difficoltà.
    Prima parlavo di array, ma anche ArrayList è serializzabile (ammesso che gli oggetti contenuti lo siano, è chiaro). Se però la tua collezione è parametrizzata (usi i generics), allora nel punto del readObject devi fare un cast "unchecked" che il compilatore segnala con un warning.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di Reiuky
    Registrato dal
    Jul 2008
    Messaggi
    371
    Sì. In effetti ho notato anche io.

    Da il warning, ma non mi dice 'perché'. Comunque, se non è un 'errore' importante, ce lo lascio comunque.

  6. #6
    Utente di HTML.it L'avatar di Reiuky
    Registrato dal
    Jul 2008
    Messaggi
    371
    Non so bene cosa ho combinato, ma non riesco + a salvare.

    L'errore che mi da è

    Errore in salvataggio:java.io.NotSerializableException: gestione.RecordErrori

    l'array è composto da elementi del tipo
    codice:
    public class RecordReport implements Serializable, Comparable<RecordReport>
    {
    	//public String nomeFile;
    	public File file;
    	public String string1;
    	public String string2;
    	public boolean presenzaErrori;
    	public RecordErrori errori[];
    	public long memTime;
    	
    	public RecordReport(String[] dati, RecordErrori[] errori2)
    	{
    		string1 = dati[0];
    		string2 = dati[1];
    		presenzaErrori = dati[2] != null && dati[3].equalsIgnoreCase( "S" );
    		errori = errori2;
    		xml = new File( CostantiAmbiente.dir + "\\" + string1 + "_" + string2 + ".xml" );
    		memTime = System.currentTimeMillis();
    	}
    
    
    	public int compareTo( RecordReport anotherRec )
    	{
    		int out = 0;
    		
    		if( Integer.parseInt( this.string1 ) > Integer.parseInt( anotherRec.string1 ) )
    		{
    			out = +1;
    		}
    		else if( Integer.parseInt( this.string1 ) < Integer.parseInt( anotherRec.string1 ) )
    		{
    			out = +1;
    		}
    
    		// verifico la data di memorizzazione, in modo da visualizzare x primo l'elemento + recente
    		if( out == 0 ) // Ovvero non è ancora stato trovato l'elemento di discernimento
    		{
    			if( this.memTime > anotherRec.memTime )
    			{
    				out = +1;
    			}
    			else if( this.memTime < anotherRec.memTime )
    			{
    				out = -1;
    			}
    		}
    		
    		return out;
    	}
    }
    Ovviamente un po' alleggerita. Mancano almeno una decina di String

    Quale potrebbe essere l'elemento non serializzabile?

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Reiuky
    Quale potrebbe essere l'elemento non serializzabile?
    Te lo dice la eccezione!

    java.io.NotSerializableException: gestione.RecordErrori
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it L'avatar di Reiuky
    Registrato dal
    Jul 2008
    Messaggi
    371
    Originariamente inviato da andbin
    Te lo dice la eccezione!

    java.io.NotSerializableException: gestione.RecordErrori
    Giusto.

    Ci ho ripensato stanotte prima di addormentarmi.

    Grazie lo stesso ^_________^

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.