РЕДАКТИРОВАТЬ (2018): отредактированный ответ брата от @xinyongCheng - более простой подход, и он должен быть принятым ответом.
Ваш подход был бы разумным, если бы вы знали, что байты находятся в кодировке платформы по умолчанию. В вашем примере это правда, потому что k.getBytes()
возвращает байты в кодировке платформы по умолчанию.
Чаще вы захотите указать кодировку. Однако есть более простой способ сделать это, чем заданный вами вопрос. String API предоставляет методы, которые преобразуют массив String в массив byte [] в определенной кодировке. Эти методы предлагают использовать CharsetEncoder / CharsetDecoder, «когда требуется больший контроль над процессом декодирования [кодирования]».
Чтобы получить байты из String в определенной кодировке, вы можете использовать родственный метод 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)
для получения байтов из буфера в массив байтов.