Comment obtenir le tableau `byte []` de taille de paquet réel dans Java UDP
C'est la question suivante, de ma précédente:
Java UDP envoyer - recevoir des paquets un par un
Comme je l'ai indiqué il y a, fondamentalement, je veux recevoir un paquet, un par un, comme c'est via UDP.
Voici un exemple de code:
ds = new DatagramSocket(localPort);
byte[] buffer1 = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer1, buffer1.length);
ds.receive(packet);
Log.d("UDP-receiver", packet.getLength()
+ " bytes of the actual packet received");
Ici, la taille du paquet est de le dire, 300bytes, mais le buffer1
est réparti comme 1024 octets, et pour moi, c'est quelque chose de mal avec traiter avec buffer1
.
Comment faire pour obtenir l'effectif de la taille des paquets byte[]
tableau à partir d'ici?
et, plus fondamentalement, pourquoi avons-nous besoin de préallouer la taille de la mémoire tampon pour recevoir des paquets UDP en Java comme cela? ( node.js ne pas le faire )
Est-il un moyen de ne pas pré-allouer la taille de la mémoire tampon et recevez directement le paquet UDP que c'est?
Merci pour votre pensée.
source d'informationauteur Ken OKABE | 2014-02-19
Vous devez vous connecter pour publier un commentaire.
Vous avez répondu à votre propre question.
packet.getLength()
renvoie le nombre d'octets du datagramme reçu. Donc, vous avez juste à utiliserbuffer[]
à partir de l'index0
à l'indice depacket.getLength()-1.
Notez que cela signifie que si vous appelez
receive()
dans une boucle, vous devez recréer lesDatagramPacket
chaque fois autour de la boucle, ou de réinitialiser sa longueur au maximum avant de le recevoir. SinongetLength()
continue de diminuer à la taille de la plus petite datagramme reçu jusqu'à présent.auto réponse. J'ai fait comme suit: