In che modo Java gestisce i riferimenti ai dati ciclici durante la serializzazione di un oggetto? [duplicare]

2

Come domanda di assegnazione, mi viene chiesto di rispondere alle seguenti domande:

How are cycles handled? Where does the term graph come from?

Negli esempi forniti, non sembra esserci alcun trucco chiaro che è stato fatto per serializzare una lista ciclica collegata, quindi non posso discernere se qualcosa di speciale è stato fatto da parte del programmatore, o se è gestito internamente dalla JVM. Inoltre, una ricerca su Google non sembra rispondere alla domanda se non per dire che la JVM gestisce la serializzazione ciclica in modo nativo non ripetendo la serializzazione degli oggetti. Ma non sono soddisfatto che questo in realtà risponda alla domanda di "come".

La mia ipotesi migliore è che alcune forme di algoritmo spanning tree vengano eseguite sul grafico degli oggetti per rimuovere i cicli, ma ancora una volta, questo non è confermato ...

Dove posso trovare informazioni per aiutare a rispondere a questa domanda?

    
posta agent154 13.02.2014 - 12:41
fonte

1 risposta

5

memorizza nella cache l'oggetto e utilizza i riferimenti in modo che gli oggetti non vengano scritti due volte

5. If the object has already been written to the stream, its handle is written to the stream and writeObject returns.
12. For regular objects, the ObjectStreamClass for the class of the object is written by recursively calling writeObject. It will appear in the stream only the first time it is referenced. A handle is assigned for the object.

link

In altre parole controlla un IdentityHashMap<Object,Handle> per ogni oggetto che scrive. e se presente scriverà semplicemente l'handle.

questo può essere sovrascritto usando writeUnshared(Object) per scrivere l'oggetto

    
risposta data 13.02.2014 - 12:52
fonte

Leggi altre domande sui tag