Utilisation de Serialisable autre que L'écriture et la lecture objet vers / à partir du fichier
dans lesquels cas il est une bonne pratique de codage d'utiliser des instruments sérialisables autre que L'écriture et la lecture objet à / à partir de fichier.Dans un projet je suis passé par code. Une classe utilisant des outils sérialisables, même si dans cette classe / projet il n'y a pas D'objets D'écriture/de lecture vers/à partir du fichier?
7 réponses
si l'objet quitte la JVM dans laquelle il a été créé, la classe doit implémenter Serialisable.
Sérialisation est une méthode par laquelle un objet peut être représenté comme une séquence d'octets qui comprend les données de l'objet ainsi que des informations sur le type de l'objet et les types de données stockées dans l'objet.
Après un objet sérialisé a été écrit dans un fichier, il peut être lu à partir du fichier et désérialisé c'est le type d'information et d'octets qui représentent l'objet et ses données peuvent être utilisées pour recréer l'objet en mémoire.
C'est le but principal de la désérialisation. Pour obtenir l'information objet, type objet, variable type information à partir d'une représentation écrite(vaguement parlant) d'un objet. Et donc la sérialisation est nécessaire en premier lieu, pour rendre cela possible.
ainsi, chaque fois que votre objet a une possibilité de en quittant le JVM, le programme est exécuté, vous devriez rendre la classe, implémenter Serialisable.
Lire / Écrire des objets dans des fichiers (mémoire), ou passer un objet sur internet ou tout autre type de connexion. Chaque fois que l'objet quitte la JVM dans laquelle il a été créé, il doit implémenter Serialisable, de sorte qu'il puisse être sérialisé et désérialisé pour la reconnaissance une fois qu'il rentre dans une autre/même JVM.
:
avantages de la sérialisation:
-
Pour conserver les données pour une utilisation ultérieure.
-
pour envoyer des données à un ordinateur distant en utilisant les technologies client/serveur Java comme RMI , la programmation socket, etc.
-
pour aplatir un objet en tableau d'octets en mémoire.
-
Pour envoyer des objets entre les serveurs d'un cluster.
-
pour l'échange de données entre applets et servlets.
-
pour stocker la session de l'utilisateur dans les applications Web
-
pour activer/passivate enterprise Java beans.
vous pouvez vous référer à cet article pour plus de détails.
si vous vous attendez à ce que votre objet soit utilisé comme données dans un paramètre RMI, il doit être sérialisable, car RMI a besoin soit des objets Serializable
(s'ils doivent être sérialisés et envoyés sur le côté distant), soit d'être un UnicastRemoteObject
si vous avez besoin d'une référence à distance.
dans les versions précédentes de java (avant java 5) les interfaces marqueur étaient une bonne façon de déclarer les métadonnées, mais actuellement nous avons annotation qui sont plus puissants pour déclarer les métadonnées pour les classes.
Annotation fournit la capacité très souple et dynamique et nous pouvons fournir la configuration pour l'annotation meta deta que soit nous voulons envoyer cette information en code octet ou à l'exécution.
Ici, Si vous n'êtes pas prêt à lire & Ecrire objet puis il reste un but de la sérialisation est, déclarer des métadonnées pour la classe et si vous êtes goint à déclarer des métadonnées pour la classe alors personnellement, je suggère que vous n'utilisez pas la sérialisation juste aller pour l'annotation.
Annotation est un meilleur choix que l'interface de marqueur et JUnit est un exemple parfait d'utilisation de L'Annotation par exemple @Test pour spécifier une classe de Test. Il est également possible d'obtenir le même résultat en utilisant L'interface du marqueur D'essai.
il y en a un de plus exemple qui indique que les Annotations sont meilleur choix @ThreadSafe semble beaucoup mieux que la mise en œuvre de l'interface de marqueur de ThraedSafe.
Il y a d'autres cas dans lesquels vous souhaitez envoyer un objet par valeur et non par référence:
- envoyer des objets sur le réseau.
ne Peut pas vraiment envoyer des objets par référence.
- Multithreading, en particulier dans Android
Android utilise Serialisable/divisible pour envoyer des informations entre les activités. Il a quelque chose à voir avec la mémoire la cartographie et le multithreading. Je ne comprends pas vraiment ce que.
avec Martin c 'S réponse je veux ajouter que-si vous utilisez Serializable
alors vous pouvez facilement charger votre Object
graphique à la mémoire. Par exemple, vous avez une classe Student
qui a une classe Deportment
. Donc, si vous sérialisez votre Student
, alors le Department
sera aussi sauvegardé. En outre, il vous permet également -
1. pour renommer des variables dans une classe sérialisée tout en maintenant la rétrocompatibilité.
2. pour accéder aux données des champs supprimés dans une nouvelle version (en d'autres termes, changer la représentation interne de vos données tout en maintenant la rétrocompatibilité).
certains cadres / environnements peuvent dépendre d'objets de données pouvant être sérialisables. Par exemple , dans J2EE , les attributs HttpSession
doivent être sérialisables afin de bénéficier de session Persistence . Aussi RMI et d'autres Dark ages artifacts utiliser la sérialisation.
par conséquent, même si vous n'avez pas besoin immédiatement de vos objets de données pour être sérialisable, il pourrait faites sens à déclarez sérialisable juste dans le cas (il est presque libre, à moins que vous devez passer par la douleur de déclarer readobject / writeObject méthodes )