Je recherche le format que Java utilise pour sérialiser des objets. La sérialisation par défaut Serialise l'objet dans un format binaire. En particulier, je suis curieux de savoir si deux courses d'un programme peuvent sérialiser le même objet différemment. P>
Dans quelle condition un objet devrait-il satisfaire de manière à ce que l'objet maintient son comportement sous la série de la série de sérialisation / désérialisation par défaut de Java? p>
7 Réponses :
Si vous avez deux objets avec toutes les propriétés définies sur des valeurs identiques, ils seront sérialisés de la même manière. P>
S'il n'y avait pas répétable, il ne serait pas utile! p>
@Kieveli: pas vrai. Considérez le cas des structures de données HASHSET et HASHMAP.
Ils vont toujours le sérialiser de la même manière. Si ce n'était pas le cas, il n'y aurait aucune garantie qu'un autre programme pourrait désafféraliser correctement les données, vaincre le but de la sérialisation. P>
Est-ce qu'il fuit des informations susceptibles de changer de différentes exécutions de programme, telles que des adresses de mémoire d'objet?
Non, c'est aussi loin que je connais une représentation pure de l'objet et de ses valeurs seulement; Les données nécessaires pour recréer l'objet lorsqu'ils sont désexissiqués et rien d'autre.
Il n'y a pas de raison inhérente à la raison pour laquelle une sérialisation du même objet nécessite deux fois de produire la même séquence d'octets. Par exemple, ils pourraient être cryptés avec différentes clés. Tant que la clé précède l'objet dans le flux de données sérialisées et que l'algorithme de cryptage était connu, tout autre programme pourrait facilement déchiffrer le flux et recréer l'objet d'origine. Il n'y a aucune raison de croire que la sérialisation de Java le fait, mais cela est éventuellement possible.
@Pete: votre raisonnement est faux car @Alohci souligne. Les autres contre-exemples incluent les différences dans les références de nœuds internes dans la série de sérialisation et le «bruit» inclus dans la sérialisation ignorée lorsque le flux est désérialisé.
@Pete: Et un autre contre-exemple est des structures de données hachées où le hashcode est produit par la méthode par défaut objet.hashscode () code>.
Points valides et bons commentaires. Ces différences ne devraient pas avoir d'importance, mais vous êtes correct que l'octet d'octet pourrait y avoir des différences.
Je cherche le format que Java utilise pour sérialiser des objets. P> blockQuote>
ne pas être inane, cela les écrit d'une manière ou d'une autre. Comment exactement cela est peut et devrait probablement être déterminé par vous. Une carte de personnage pour .... euh, il est impliqué mais plutôt que de réinventer la roue, demandons-vous exactement que devez-vous avoir pour reconstruire un objet à quel état? p>
La série de sérialisation par défaut Serialise l'objet dans un format binaire. P> blockQuote>
Alors? (Encore une fois, n'essayez pas d'être inane - sonne comme si nous devons définir un problème qui peut ne pas avoir de concept de données) p>
Je suis curieux de savoir si deux courses d'un programme peut sérialiser le même objet différemment. p> blockQuote>
Si vous aviez un flux d'informations, comment détermineriez-vous ce que l'objet doit être restauré? P>
Vous avez besoin de la spécification de sérialisation de l'objet Java à http: //java.sun.com/javase/6/docs/platform/serialization/spec/protocol.html . P>
exécutant généralement le même algorithme à une seule-fileté avec les mêmes données aura le même résultat. P>
Cependant, des choses telles que la commande avec laquelle un hashset code> Serialises entrées n'est pas garantie. En effet, un objet peut être subtilement altéré lorsque sérialisé. P>
J'aime l'exemple de @stephen C d'objet.hascode (). Si de tels codes de hachage nondéterministes sont sérialisés, alors lorsque nous désérialisez, les codes de hachage ne seront pas utilisés. Par exemple, si nous sérialisons un hashmap qui fonctionne basé sur objet.hashcode (), sa version désérialisée se comporterait différemment de la carte d'origine. C'est-à-dire que la recherche du même objet nous donnerait des résultats différents dans les deux cartes. P>
Modifiez votre question initiale, ne demandez pas de réponse dans une réponse selon les directives Stackoverflow.
Sûr. J'ai déplacé ma question. C'est en fait une reformulation de la question initiale.