Il tuo approccio sarebbe ragionevole se si sapeva i byte sono in charset di default 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 converte tra una stringa e una matrice byte [] in una particolare codifica. Questi metodi suggeriscono di usare CharsetEncoder/CharsetDecoder "quando è richiesto un maggiore controllo sul processo di decodifica [codifica]."
import java.nio.charset.Charset;
Per ottenere i byte da una stringa in una codifica particolare, è possibile utilizzare un fratello getBytes() metodo:
byte[] bytes = k.getBytes(Charset.forName("UTF-8"));
Per mettere byte con una codifica particolare in una stringa, si può utilizzare un costruttore String diversa:
String v = new String(bytes, Charset.forName("UTF-8"));
noti che ByteBuffer.array()
è un'operazione facoltativa. Se hai costruito ByteBuffer con un array, puoi utilizzare direttamente tale array. In caso contrario, se si desidera essere sicuri, utilizzare ByteBuffer.get(byte[] dst, int offset, int length)
per ottenere byte dal buffer in un array di byte.
EDIT
Come una questione secondaria, nel codice di esempio sopra la chiamata a Charset.forName("UTF-8")
dovrebbe funzionare per tutte le versioni di Java, in quanto 1.4.
Se si utilizza Java 7 o successivo, è invece possibile utilizzare java.nio.charset.StandardCharsets.UTF_8
. (notato da BenKirby nel suo commento qui sotto.)
Se stai usando Guava, è possibile invece utilizzare com.google.common.base.Charsets.UTF_8
. (annotato da Spacecamel nel suo commento qui sotto)
Bene, ci hai provato? – Doorknob
Sì, l'ho fatto e funziona. Ma ho visto altre implementazioni più complesse, come http://stackoverflow.com/questions/1252468/java-conversing-string-to-and-from-bytebuffer-and-associato-problemi –
@Doorknob et. al. Manca la codifica e il suo esempio (quando la sintassi è corretta) funzionerà, ma il suo metodo non è ancora corretto. – Gus