6
votes

Sérialisation Java

Je pose un doute que je suis tombé sur la lecture de Java efficace. Je m'excuse si c'est un vrai doute simple et simple. Donc, dans Point 74 - Mettre en œuvre Serializable Judicieusement , il dit que même après avoir mis en œuvre une bonne information qui se cache sur votre classe en utilisant des champs privés privés et privés privés, il est sujette à perdre de l'efficacité? Tout ce que j'ai lu dans le passé était, toute la sérialisation est, convertissez des objets en forme de flux d'octets et après la désérialisation, le même objet est retenu. Comment ça perd des données cachées dans ce processus?


0 commentaires

3 Réponses :


4
votes

Vous pouvez potentiellement avoir accès à la valeur de l'état interne d'un objet à l'aide de la sérialisation et de la désérialisation.

En sérialisant un objet, vous pourrez peut-être lire les valeurs des champs privés que vous ne devriez autrement pas. Inversement, si vous créez une matrice d'octete bien fabriquée que vous désérialisez dans une instance, vous pourrez peut-être l'initialiser dans un état illégal.


2 commentaires

Hmmm


Eh bien, dans certains sens oui, mais si vous pensez que cela peut causer des problèmes, vous pouvez toujours remplacer la méthode ReadObject (), vérifier l'état vous-même et jeter une exception s'il viole une certaine contrainte. En ce qui concerne les valeurs d'accès, dans la plupart des cas pratiques, ce n'est pas un gros problème.



0
votes

Cache de données Un problème de cachette avec sérialisation dans le contexte de OOP est pointé par @candiru.

Mais il existe également un autre aspect avec la sérialisation .

Vous pouvez envoyer un fichier sérialisé sur le réseau afin qu'il puisse être aimé et que des choses censées être privées peuvent être facilement compromises.

ci-dessous est le contenu d'une classe de haricots que j'ai sérialisé (en utilisant la technique par défaut). Je pourrais afficher le contenu en ouvrant le fichier sérialisé dans un éditeur de texte.

’ SR Serializationpractice1 I Agel extrat LJAVA / LANG / STRING; L nomQ ~ xp

pt sidkumarq ~ x

Vous pouvez maintenant trouver facilement ci-dessous des choses sans même savoir sur la classe:

  1. Nom de la classe: Serializationpractice1
  2. Un attribut string nommé comme nom est sidkumar

    Ces choses que vous pouvez remarquer à coup sûr; D'autres détails ne sont pas si clairs. Et ci-dessus les informations sont correctes.


0 commentaires

0
votes

Je crois que la sérialisation a le potentiel d'exposer des données privées au monde extérieur. Et c'est là que l'externalisation (l'utilisation d'instances de type externalisable est très pratique). En mettant en œuvre la méthode WriteExternal de l'interface externalisable (...), le développeur a un contrôle total sur le processus de sérialisation plutôt que de s'appuyer complètement sur la mise en œuvre de la diffusion de la série par défaut. Vous trouverez ci-dessous le pseudo-code pour mon idée (je voudrais ignorer les signatures méthodes réelles car il n'est qu'un pseudo-code destiné à mettre à l'autre une idée plus large): xxx

en fait, pourquoi Just Cryptage, nous voudrons peut-être compresser les octets sérialisés à un magasin persistant si nous voulons dans certaines situations où l'instance à sérialiser est "gros".


0 commentaires