你的做法是合理的。在你的例子中,這是真的,因爲k.getBytes()
返回平臺的默認字符集中的字節。
更頻繁地,您需要指定編碼。但是,有一個比你連接的問題更簡單的方法。字符串API提供了以特定編碼方式在字符串和byte []數組之間進行轉換的方法。當需要對解碼[編碼]過程進行更多控制時,這些方法建議使用CharsetEncoder/CharsetDecoder 「。
import java.nio.charset.Charset;
爲了得到一個字符串的字節在一個特定的編碼,您可以用兄弟姐妹的getBytes()方法:
byte[] bytes = k.getBytes(Charset.forName("UTF-8"));
爲了把字節與特定的編碼方式轉化爲字符串,可以使用不同的字符串構造函數:
String v = new String(bytes, Charset.forName("UTF-8"));
請注意,ByteBuffer.array()
是一個可選操作。如果你用數組構造了你的ByteBuffer,你可以直接使用該數組。否則,如果您想安全起見,請使用ByteBuffer.get(byte[] dst, int offset, int length)
將緩衝區中的字節轉換爲字節數組。
編輯
作爲一個方面的問題,在示例代碼中調用Charset.forName("UTF-8")
以上,因爲1.4所有Java版本應該工作。
如果您使用的是Java 7或更高版本,則可改爲使用java.nio.charset.StandardCharsets.UTF_8
。 (由BenKirby在下面他的註釋中提到。)
如果您使用番石榴,您可以改用com.google.common.base.Charsets.UTF_8
。 (注意下面的評論中的spacecamel。)
那麼,你試過嗎? – Doorknob
是的,我做了,它的工作。但我看到其他更復雜的實現,如http://stackoverflow.com/questions/1252468/java-converting-string-to-and-from-bytebuffer-and-associated-problems –
@ Doorknob et。人。他缺少編碼,他的例子(當語法被糾正時)會起作用,但他的方法仍然不正確。 – Gus