6
votes

Est-il coulé en Java similaire à en C ++

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 ++?


0 commentaires

6 Réponses :


7
votes

Non, vous pouvez utiliser sérialisation à la place.


1 commentaires

Merci@hubbitus. J'ai changé en un autre lien qui explique également la sérialisation.




5
votes

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".

Comment ces octets ont-ils été que vous souhaitez "restaurer dans un objet" créé en premier lieu?

Java a un mécanisme de sérialisation pour convertir des objets en un flux d'octets et inversement.


0 commentaires

3
votes

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.

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. .


0 commentaires

0
votes

REINERPRET_CAST 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.

Quant à la question spécifique de savoir si Java a un équivalent de réinterpret_cast , la réponse est un oui partiel. Si vous essayez de lire des primitives à partir d'un flux de données binaires, bytebuffer 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 des octets en entiers ou flotteurs 32 bits ou autre.


0 commentaires

0
votes

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 sun.misc.unsafe .

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.

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.

Edit: quelque chose comme ça peut-être: xxx

Bien sûr que vous réinterpret facilement ces primitives dans n'importe quoi. Je n'ai même pas besoin de dangereux # putint , mais évidemment, j'ai besoin d'INTS selon test


0 commentaires