EDIT (2018): La réponse des frères et sœurs éditée par @xinyongCheng est une approche plus simple et devrait être la réponse acceptée.
Votre approche serait raisonnable si vous saviez que les octets sont dans le jeu de caractères par défaut de la plate-forme. Dans votre exemple, cela est vrai car k.getBytes()
renvoie les octets du jeu de caractères par défaut de la plateforme.
Plus fréquemment, vous voudrez spécifier l'encodage. Cependant, il existe un moyen plus simple de le faire que la question que vous avez liée. L'API String fournit des méthodes qui convertissent entre un tableau String et un tableau d'octets [] dans un codage particulier. Ces méthodes suggèrent d'utiliser CharsetEncoder / CharsetDecoder "lorsqu'un contrôle accru sur le processus de décodage [d'encodage] est nécessaire".
Pour obtenir les octets d'une chaîne dans un encodage particulier, vous pouvez utiliser une méthode getBytes () sœur:
byte[] bytes = k.getBytes( StandardCharsets.UTF_8 );
Pour placer des octets avec un encodage particulier dans une chaîne, vous pouvez utiliser un constructeur de chaîne différent:
String v = new String( bytes, StandardCharsets.UTF_8 );
Notez qu'il ByteBuffer.array()
s'agit d'une opération facultative. Si vous avez construit votre ByteBuffer avec un tableau, vous pouvez utiliser ce tableau directement. Sinon, si vous voulez être sûr, utilisez ByteBuffer.get(byte[] dst, int offset, int length)
pour obtenir des octets du tampon dans un tableau d'octets.