EDYCJA (2018): Edytowana odpowiedź rodzeństwa autorstwa @xinyongCheng jest prostszym podejściem i powinna być akceptowaną odpowiedzią.
Twoje podejście byłoby rozsądne, gdybyś wiedział, że bajty znajdują się w domyślnym zestawie znaków platformy. W twoim przykładzie jest to prawda, ponieważ k.getBytes()
zwraca bajty w domyślnym zestawie znaków platformy.
Częściej będziesz chciał określić kodowanie. Jest jednak na to prostszy sposób niż pytanie, które łączysz. String API udostępnia metody, które konwertują między String a tablicą byte [] w określonym kodowaniu. Te metody sugerują użycie CharsetEncoder / CharsetDecoder „gdy wymagana jest większa kontrola nad procesem dekodowania [kodowania]”.
Aby uzyskać bajty z String w określonym kodowaniu, możesz użyć siostrzanej metody getBytes ():
byte[] bytes = k.getBytes( StandardCharsets.UTF_8 );
Aby umieścić bajty z określonym kodowaniem w String, możesz użyć innego konstruktora String:
String v = new String( bytes, StandardCharsets.UTF_8 );
Zauważ, że ByteBuffer.array()
jest to operacja opcjonalna. Jeśli zbudowałeś swój ByteBuffer z tablicą, możesz użyć tej tablicy bezpośrednio. W przeciwnym razie, jeśli chcesz być bezpieczny, użyj polecenia, ByteBuffer.get(byte[] dst, int offset, int length)
aby pobrać bajty z bufora do tablicy bajtów.