你的做法是合理的。在你的例子中,这是真的,因为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