2017-07-26 9 views
-1

J'ai une méthode qui est supposée retourner un ByteBuffer. La viande de la méthode effectue les opérations suivantes:ByteBuffer retourner quand la dernière valeur est nulle

if (true) { 
    //code that puts some data into ByteBuffer bb 
    return bb 
} 
else { 
    //should not be writing any data to bb 
    //intention: leave bb as is 
    return null; 
} 

Après avoir appelé cette méthode et de mettre les données nécessaires dans le ByteBuffer, je retourne dans un tableau d'octets en appelant d'abord bb.flip(). Toutefois, si la dernière itération via la boucle if-else s'est avérée être false, la dernière donnée entrée est null et j'obtiens l'erreur java.lang.NullPointerException.

Allocating zero capacity ByteBuffer

Selon la page ci-dessus, je suis censé revenir un ByteBuffer, mais je ne suis pas sûr de savoir comment revenir à zéro longueur quelque chose comme ça.

Des idées sur la façon de retourner un tampon d'octets vide?

+0

[Combien d'efforts de recherche sont attendus des utilisateurs de Stack Overflow?] (Https://meta.stackoverflow.com/questions/261592/how-much-research-effort-is-expected-of-stack-overflow-users) La réponse, * "Beaucoup, une quantité absurde, plus que ce que vous pensez être capable Après que vous ayez atteint le bout de votre corde et la douleur de ne pas avoir la réponse dépasse la grande quantité de honte reçue en posant votre question C'est à ce moment-là que vous aurez fait toutes les recherches nécessaires pour en faire une bonne question. »* –

+0

La question que vous avez posée a le code exact dont vous avez besoin. ** C'est littéralement la deuxième ligne de la question! ** Chaque question [tag: java] que vous avez posée jusqu'à présent est expliquée en lisant simplement [tag: javadoc]. –

+0

Apprenez à utiliser le [JavaDoc] (https://stackoverflow.com/questions/11747712/where-is-the-javadoc-for-my-installed-java-i-have-sdk-for-7) avant de venir ici demander à quelqu'un d'autre de vous le lire. ['ByteBuffer.allocate()'] (https://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html#allocate (int)) –

Répondre

0

Étant donné que vous allez utiliser le ByteBuffer dans les deux cas, la méthode doit le renvoyer de manière inconditionnelle. La valeur null renvoie simplement l'erreur que vous avez observée.

Pour rendre ce code plus clair, je voudrais simplement que la méthode retourne le type void. La méthode peut ajouter des octets dans le ByteBuffer (ou non) en appelant des méthodes dessus - la valeur de retour ici est en fait superflue.

0

Lors de l'utilisation de bloc autre déclaration suivante pour éviter NPE (d'exception de pointeur null)

de ByteBuffer.allocate de retour (0);