J'essaye ce code: byte arr[] = ByteBuffer.allocate(2).putInt(1).array()
Mais il échoue avec un BufferOverflowException
. Est-ce que 1 est trop grand pour être stocké dans 2 octets? Ou est mon problème ailleurs?Java (Android) - BufferOverflowException sur putInt
Répondre
Est-ce que 1 est trop grand pour être stocké dans 2 octets?
Eh bien, un int
est ... putInt
écrit toujours 4 octets. De l'documentation for ByteBuffer.putInt
Lancers:
BufferOverflowException - S'il y a moins de quatre octets restants dans ce tampon
Si vous voulez seulement mettre un nombre entier de deux octets, utilisez putShort
à la place. Si vous souhaitez stocker des données dans un encodage à largeur variable (où l'espace utilisé dépend de la valeur), vous devrez probablement écrire le code vous-même.
De javadoc du procédé putInt
:
Ecrit quatre octets contenant la valeur d'int donnée, dans l'ordre des octets de courant, dans ce tampon à la position actuelle, et incrémente alors la position par quatre
Vous seulement 2 octets alloué de sorte que le BufferOverflowException
:
Exception non contrôlée levée lorsqu'une opération relative atteint la limite du tampon cible.
Vous pouvez résoudre expading à 4 octets le tampon ou à l'aide putShort qui utilisent seulement 2 octets pour stocker le numéro 1.
ByteBuffer.putInt(1)
met une valeur entière dans le tampon. Un entier a une longueur de 4 octets (32 bits).