Je comprends mon éventail de messages de fonction d'octets et de type d'objet, j'ai besoin de restaurer l'objet des octets. Y a-t-il dans Java tout casting comme en C ++? P>
6 Réponses :
Non, vous pouvez utiliser sérialisation à la place. p>
Merci@hubbitus. J'ai changé en un autre lien qui explique également la sérialisation.
Non, vous devez sérialiser votre objet.
http://java.sun.com/developer/technicalarticles/programmation/serialization/ " a> p>
Cela peut ne pas être utile si vos données d'objet devraient être lisibles dans d'autres langues. P>
Il n'existe aucun moyen de Java d'avoir un bloc d'octets arbitraire, puis de dire au compilateur "Vous devez traiter cela comme objet de type X". P>
Comment ces octets ont-ils été que vous souhaitez "restaurer dans un objet" créé en premier lieu? p>
Java a un mécanisme de sérialisation pour convertir des objets en un flux d'octets et inversement. P>
Je ne sais pas exactement ce que vous demandez ici, mais chaque objet en Java (et cela inclut les tableaux) a des informations de type d'exécution associées à celle-ci. Ainsi, lorsque vous lancez un objet à un autre type, une exception est lancée si le nouveau type ne correspond pas. Ceci est très différent de C / C ++ où vous pouvez simplement dire au compilateur de traiter un bloc de mémoire comme quel que soit l'objet que vous le souhaitez. P>
Si vous recherchez du code pour convertir un ensemble arbitraire d'octets en un objet ou inversement, vous devez le faire d'une manière différente, en utilisant les installations de sérialisation intégrées ou également à rouler votre propre code de conversion. . p>
Quant à la question spécifique de savoir si Java a un équivalent de REINERPRET_CAST CODE> peut être simulé dans Java à un certain degré, mais pas pour la désérialisation directe d'un objet entier. Comme d'autres l'ont suggéré, le mécanisme de sérialisation intégré de Java ou d'autres bibliothèques de sérialisation tierces serait votre ami, à moins que vous n'ayez le luxe de la décomposition de votre objet dans des types plus simples sur la fin de l'envoi. P>
réinterpret_cast code>, la réponse est un oui partiel. Si vous essayez de lire des primitives à partir d'un flux de données binaires, bytebuffer code> est votre ami. Enveloppez-le autour d'un tableau d'octets, dites-lui si les données sont petites endiennes ou grand Endian, puis utilisent ses différentes méthodes pour décoder les données. Cela peut être utilisé pour simuler diverses conversions C ++ Reterpret_cast CODE> des octets en entiers ou flotteurs 32 bits ou autre. P>
Si vous voulez vraiment prendre un bloc de mémoire et le réinterpréter en tant qu'objet Java, vous pouvez réaliser cela à travers Vous auriez besoin d'itérer le Classe / Type de l'objet, trouvez tous les champs valides que vous devez définir, lire leurs types spécifiques hors du tampon de mémoire hors tas et les définir via une réflexion. P> Ce n'est pas quelque chose que je ' D Recommander, faire de l'utilisation d'autres mécaniciens de sérialisation serait une alternative bien meilleure. p> Edit: quelque chose comme ça peut-être: p> Bien sûr que vous réinterpret facilement ces primitives dans n'importe quoi. Je n'ai même pas besoin de sun.misc.unsafe code>. dangereux # putint code>, mais évidemment, j'ai besoin d'INTS selon test code> p> p> p>