2009-12-21 7 views

Répondre

15

En supposant que vous parlez d'un objet sérialisé:

essayez ceci:

ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(data)); 
Message message = (Message) in.readObject(); 
in.close(); 

Si vous sérialisez le message d'une autre façon, vous aurez pour l'analyser vous-même, en utilisant un constructeur paramétré ou une méthode statique qui retourne une nouvelle instance du type.

2

Vous êtes probablement mieux d'écrire une fonction pour le faire.

Message parseDataFromSocket(byte[] bytes); 
+1

La mise en œuvre de cette fonction whould être une meilleure réponse. – Fortega

+4

Non, ce ne serait pas parce que l'OP n'a jamais spécifié dans quel format les données sont stockées - toute réponse serait tout à fait fausse à moins que Seth puisse lire correctement les pensées ou les suppositions. – Bombe

+0

en fait c'est une bonne réponse car vous pouvez cacher comment fonctionne le "parse" - si peut être vraiment l'analyse ou il peut être décompactant un objet sérialisé ... le mieux est que l'utilisateur de la méthode ne se soucie pas vraiment de comment il obtient fait, juste que c'est fait. – TofuBeer

1

Essayez d'utiliser un ObjectInputStream avec un ByteArrayInputStream.

Il semble que vous essayiez de lire une classe sérialisée.

Édité à ByteArrayInputStream comme mentionné ci-dessus.

1

Vous devez créer un constructeur de Message qui prend un octet [] (et l'utilise pour initialiser l'objet d'une manière ou d'une autre). Vous pouvez alors faire:

Message m = new Message(data); 
1

Si le tableau d'octets a été publié en feuilleton normalement, vous pouvez utiliser un ByteArrayInputStream, passer que dans un ObjectInputStream et jeter le Object résultant dans votre classe Message.

1

Cela dépend de la façon dont le tableau d'octets a été créé ... Vous pouvez essayer:

ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(data)) 
Message m = (Message) in.readObject(); 
4

Vous ne pouvez pas lancer des données binaires arbitraires (en Java).

Qu'est-ce que cet octet [] est supposé contenir? S'il s'agit d'une instance sérialisée de la classe, vous devez envelopper le InputStream du socket dans un ObjectInputStream. Si c'est un autre format binaire bien défini, vous devrez l'analyser manuellement (Note: le dumping des structures C ne constitue pas un format binaire bien défini et devrait être évité).

1

En Java, il est impossible d'effectuer de tels lancements (en C++, par exemple, on peut définir des constructeurs de conversion et les goûts).

Vous avez tagué la question avec 'sérialisation'. En supposant que vous êtes en utilisant l'API de sérialisation Java, alors comme vous l'avez déjà indiqué, vous devez alimenter le tableau data via un ObjectInputStream afin de désérialiser le tableau dans un objet. Plus d'informations peuvent être trouvées here. En outre, si vous avez utilisé un autre type de sérialisation (par exemple, en utilisant XStream pour sérialiser en XML), vous devez désérialiser (unmarshalling est un autre nom commun pour cela) les données en utilisant la même API que celle utilisée pour le sérialiser en premier lieu.

Questions connexes