2011-01-09 18 views
5

Se si dispone di un'istanza di una classe memorizzata in una sessione, è necessario renderla serializzabile. Questa classe ha una variabile statica, verrà serializzata in ogni istanza memorizzata?come funziona serializzabile in java?

La variabile statica è un riferimento a una cache che contiene molti dati sullo sfondo. Tutti questi dati saranno serializzati? Se è così, sembra preferibile rendere questa variabile transitoria e recuperare l'istanza della cache ogni volta che l'istanza viene ripristinata. Forse non memorizzare l'istanza della cache nella classe.

Il costruttore verrà eseguito quando una classe viene ripristinata da uno stato serializzato? se no c'è qualche altro metodo che posso usare per re-instare una variabile transitoria?

+1

Il costruttore no-arg della superclasse non serializzabile più derivata viene eseguito, ma non i costruttori delle classi serializzate. 'readObject' (o' readObjectNoData' può sostituire la deserializzazione di default (consultare i documenti API) –

+0

@Tom, sostituire? Quindi se implemento uno di questi metodi devo gestire tutta la serializzazione da solo? – KTrum

+0

Trumstedt Generalmente si fornire (non eseguire l'override) 'readObject'. La prima cosa che il metodo dovrebbe fare è chiamare' defaultReadObject' o 'readFields'. –

risposta

11

Questa classe ha una variabile statica, sarà questo essere serializzato in ogni caso memorizzati?

No. Secondo Java Object Serialization Specificaiton: "I campi serializzabili predefiniti di una classe sono definiti come campi non transitori e non statici."

Il costruttore verrà eseguito quando una classe viene ripristinata da uno stato serializzato?

No. La deserializzazione ignora i costruttori (a meno che non si disponga di una superclasse non serializzabile).

in caso contrario, è possibile utilizzare un altro metodo per reimpostare una variabile transitoria?

È possibile utilizzare il metodo readObject() per quello, come descritto nel documento API Serializable.

+4

Hai sempre una superclasse non serializzabile. –

3

campi statici e transitori non sono serializzati. No, il costruttore non viene chiamato. Per maggiori informazioni, si prega di controllare questo fuori: http://java.sun.com/developer/technicalArticles/ALT/serialization/

+0

Statico può essere serializzato, potresti voler guardare http: //www.ecst. csuchico.edu/~amk/foo/advjava/notes/serial.htm –

+1

Grazie per la risposta, ma per favore controlla il link Non sono riuscito a farlo funzionare Nonostante la mia interpretazione della domanda sia una variabile statica Per impostazione predefinita, con ogni istanza viene rialmentato e afaik, il comportamento predefinito per la serializzazione è che i dati statici non sono serializzati poiché non sono considerati parte dello stato dell'oggetto. –

+0

collegamento fisso = http://www.ecst.csuchico.edu/~amk/foo/advjava/notes/serial.html –

Problemi correlati