Java ByteBuffer 转换为字符串

161

以这种方式将 ByteBuffer 转换为 String,这是正确的方法吗?

String k = "abcd";
ByteBuffer b = ByteBuffer.wrap(k.getBytes());
String v = new String(b.array());

if(k.equals(v))
    System.out.println("it worked");
else
    System.out.println("did not work");

我问的原因是这看起来太简单了,而其他方法例如Java:将字符串转换为ByteBuffer及其相关问题看起来更加复杂。


3
好的,你试过了吗? - tckmn
6
是的,我做到了并且它有效。但我见过其他更复杂的实现,比如https://dev59.com/VXM_5IYBdhLWcg3wvFzI。 - vikky.rk
1
@Doorknob等。他缺少编码,当语法被纠正时,他的示例将运行,但他的方法仍然不正确。 - Gus
12个回答

0
这是一个简单的函数,用于将字节缓冲区转换为字符串:
public String byteBufferToString(ByteBuffer bufferData) {
    byte[] buffer = new byte[bufferData.readableByteCount()];
    // read bufferData and insert into buffer 
    data.read(buffer);
    // CharsetUtil supports UTF_16, ASCII, and many more
    String text = new String(buffer, CharsetUtil.UTF_8);
    System.out.println("Text: "+text);
    return text;
}

0
也许有点晚了,但这是一个对我有效的解决方案。
fun byteBufferToByteString(byteBuffer: ByteBuffer) : ByteString {
        var size = byteBuffer.capacity()
        byteBuffer.position(0)        
        return ByteString.copyFrom(byteBuffer,size)
}

注意:在这里设置缓冲区大小非常重要,因为如果没有设置,将ByteString转换回接收端的字节数组时可能会出错。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接