EDIT (2018): A resposta do irmão editada por @xinyongCheng é uma abordagem mais simples e deve ser a resposta aceita.
Sua abordagem seria razoável se você soubesse que os bytes estão no conjunto de caracteres padrão da plataforma. Em seu exemplo, isso é verdadeiro porque k.getBytes()
retorna os bytes no conjunto de caracteres padrão da plataforma.
Mais frequentemente, você desejará especificar a codificação. No entanto, há uma maneira mais simples de fazer isso do que a pergunta que você vinculou. A API String fornece métodos que convertem entre uma String e uma matriz de bytes [] em uma codificação específica. Esses métodos sugerem o uso de CharsetEncoder / CharsetDecoder "quando mais controle sobre o processo de decodificação [codificação] é necessário".
Para obter os bytes de uma String em uma codificação específica, você pode usar um método irmão getBytes ():
byte[] bytes = k.getBytes( StandardCharsets.UTF_8 );
Para colocar bytes com uma codificação específica em uma String, você pode usar um construtor String diferente:
String v = new String( bytes, StandardCharsets.UTF_8 );
Observe que ByteBuffer.array()
é uma operação opcional. Se você construiu seu ByteBuffer com um array, pode usar esse array diretamente. Caso contrário, se você quiser estar seguro, use ByteBuffer.get(byte[] dst, int offset, int length)
para obter bytes do buffer em uma matriz de bytes.