EDIT (2018): la risposta del fratello modificata di @xinyongCheng è un approccio più semplice e dovrebbe essere la risposta accettata.
Il tuo approccio sarebbe ragionevole se sapessi che i byte sono nel set di caratteri predefinito della piattaforma. Nel tuo esempio, questo è vero perché k.getBytes()
restituisce i byte nel set di caratteri predefinito della piattaforma.
Più frequentemente, ti consigliamo di specificare la codifica. Tuttavia, c'è un modo più semplice per farlo rispetto alla domanda che hai collegato. L'API String fornisce metodi che convertono tra una stringa e una matrice di byte [] in una particolare codifica. Questi metodi suggeriscono di utilizzare CharsetEncoder / CharsetDecoder "quando è richiesto un maggiore controllo sul processo di decodifica [codifica]."
Per ottenere i byte da una stringa in una particolare codifica, puoi utilizzare un metodo getBytes () di pari livello:
byte[] bytes = k.getBytes( StandardCharsets.UTF_8 );
Per inserire byte con una particolare codifica in una stringa, è possibile utilizzare un diverso costruttore di stringhe:
String v = new String( bytes, StandardCharsets.UTF_8 );
Notare che ByteBuffer.array()
è un'operazione facoltativa. Se hai costruito il tuo ByteBuffer con un array, puoi usare quell'array direttamente. Altrimenti, se vuoi essere sicuro, usa ByteBuffer.get(byte[] dst, int offset, int length)
per ottenere byte dal buffer in una matrice di byte.