EDIT (2018): Відредагована відповідь на побратим @xinyongCheng - це простіший підхід, і його слід прийняти.
Ваш підхід був би розумним, якби ви знали, що байти знаходяться в таблиці за замовчуванням платформи. У вашому прикладі це правда, тому що k.getBytes()
повертає байти в схему за замовчуванням платформи.
Частіше вам потрібно вказати кодування. Однак є простіший спосіб зробити це, ніж питання, яке ви пов’язали. API String надає методи, які перетворюють між масивом String і байтом [] в конкретне кодування. Ці методи пропонують використовувати CharsetEncoder / CharsetDecoder, "коли потрібен більше контроль над процесом декодування [кодування]".
Щоб отримати байти з рядка в певному кодуванні, ви можете скористатися методом getBytes () рідних братів:
byte[] bytes = k.getBytes( StandardCharsets.UTF_8 );
Щоб розмістити байти з певним кодуванням у String, ви можете використовувати інший конструктор String:
String v = new String( bytes, StandardCharsets.UTF_8 );
Зауважте, що ByteBuffer.array()
це необов'язкова операція. Якщо ви створили свій ByteBuffer з масивом, ви можете використовувати цей масив безпосередньо. В іншому випадку, якщо ви хочете бути в безпеці, використовуйте ByteBuffer.get(byte[] dst, int offset, int length)
для отримання байт з буфера в байтовий масив.