12
votes

Comment utiliser BYTEARRAYOutPutStream et DataOutPutStream simultanément en Java?

J'ai un problème ici, et je pense que c'est parce que je ne comprends pas beaucoup comment je devrais utiliser l'API fournie par Java.

J'ai besoin d'écrire un int code > et un octet [] code> dans un octet [] code>. p>

J'ai pensé à utiliser un dataOutputStream code> pour résoudre les données écrire avec réveilint (int i) code> et écriture (octet [] b) code>, et pour pouvoir mettre cela dans un tableau d'octets, je devrais utiliser byteAreRayOutPutStream Méthode TobyTeArray (). Code> P>

Je comprends que ces classes utilisent le motif d'emballage, j'ai donc eu deux options: P>

ByteArrayOutputStream w = new ByteArrayOutputStream(new DataOutputStream());


0 commentaires

6 Réponses :


41
votes

Comme ceci: xxx

réellement votre deuxième version ne fonctionnera pas du tout. DataOutPutStream nécessite un flux cible réel dans lequel écrire les données. Vous ne pouvez pas faire nouveau dataOutPutStream () . Il n'y a pas de constructeur comme celui-là.


4 commentaires

Je me suis toujours demandé, est-ce qu'il y a vraiment la raison de rincer un enroulé (code> byteArrayOutPutStream ?


Il n'y a pas que vous ne connaissez jamais le comportement d'une enveloppe. Il pouvait réellement faire tamponner quelque chose, alors je rince l'enveloppe par habitude :). Si c'est un wrapper passe à travers cela ne devrait pas faire mal.


Pouvez-vous déclarer la variable byTarray? et qu'est-ce que réellement w.write (byearray); faire?


Ah son travail maintenant, il y a un problème sur mon éditeur hexagonal (je l'ai écrit pour déposer juste pour le prouver et cela fonctionne)



2
votes

Utilisez l'ancien cas - Wrap dataOutUtStream autour du byteArrayOutPutStream . Assurez-vous simplement de sauvegarder la référence au byteAreRayOutPutStream . Lorsque vous avez fini, fermez () ou au moins affleurez () le dataOutputStream , puis utilisez la méthode ToByTeArray du byteAreArayOutPutStream . .


0 commentaires

0
votes

La classe INTEGER a une méthode pour obtenir la valeur d'octet d'un INT. INTEGER.BYTEVALUE ()


0 commentaires

1
votes

Vous pouvez utiliser une approche de flux si vous connectez votre sortie de sortie à un INPUTStream via un PipedinPhatStream / pipetOutPutStream . Ensuite, vous consommez les données de l'intrigue.

Quoi qu'il en soit, si ce que vous devez faire est simple et ne nécessite pas d'approche de flux, j'utiliserais un java.nio.bytebuffer sur lequel vous avez

  • mettre (octet [] src) pour votre octet []
  • puint (valeur int)
  • et byte [] tableau () pour obtenir le contenu

0 commentaires

3
votes

Pourriez-vous faire une variable pour tenir sur la byearrayOutputStream et le transmettre dans la DataOutPutStream. xxx


0 commentaires

1
votes

Vous n'avez pas besoin de plus comme ça xxx


1 commentaires

Bienvenue à Stackoverflow! Veuillez envisager Mise en forme CODE avec Markdown, il est donc plus facile de lire. Plus d'infos: Stackoverflow.com/editing-help