将bytebuffer转换为字符串在java中不起作用

将bytebuffer转换为字符串在java中不起作用,java,decode,bytebuffer,Java,Decode,Bytebuffer,在运行时,我从设备获取字节缓冲数据,我试图解码该数据以读取其内容 当我使用字符串打印bytebuffer时,它显示如下: java.nio.HeapByteBuffer[pos=0 lim=3 cap=3] CharBuffer charBuffer = StandardCharsets.UTF_8.decode(paramByteBuffer); String text = charBuffer.toString(); System.out.prin

在运行时,我从设备获取字节缓冲数据,我试图解码该数据以读取其内容

当我使用字符串打印bytebuffer时,它显示如下:

java.nio.HeapByteBuffer[pos=0 lim=3 cap=3]
       CharBuffer charBuffer = StandardCharsets.UTF_8.decode(paramByteBuffer);
       String text = charBuffer.toString();
       System.out.println("UTF-8"+text); 
       charBuffer = StandardCharsets.UTF_16.decode(paramByteBuffer);
       text = charBuffer.toString();
       System.out.println("UTF_16"+text); 
       charBuffer = StandardCharsets.ISO_8859_1.decode(paramByteBuffer);
       text = charBuffer.toString();
       System.out.println("ISO_8859_1"+text); 
       charBuffer = StandardCharsets.UTF_16BE.decode(paramByteBuffer);
       text = charBuffer.toString();
       System.out.println("UTF_16BE"+text); 
       charBuffer = StandardCharsets.UTF_16LE.decode(paramByteBuffer);
       text = charBuffer.toString();
       System.out.println("UTF_16LE"+text); 
       charBuffer = StandardCharsets.US_ASCII.decode(paramByteBuffer);
       text = charBuffer.toString();
       System.out.println("US_ASCII"+text); 
我试着用所有已知的格式解码如下

java.nio.HeapByteBuffer[pos=0 lim=3 cap=3]
       CharBuffer charBuffer = StandardCharsets.UTF_8.decode(paramByteBuffer);
       String text = charBuffer.toString();
       System.out.println("UTF-8"+text); 
       charBuffer = StandardCharsets.UTF_16.decode(paramByteBuffer);
       text = charBuffer.toString();
       System.out.println("UTF_16"+text); 
       charBuffer = StandardCharsets.ISO_8859_1.decode(paramByteBuffer);
       text = charBuffer.toString();
       System.out.println("ISO_8859_1"+text); 
       charBuffer = StandardCharsets.UTF_16BE.decode(paramByteBuffer);
       text = charBuffer.toString();
       System.out.println("UTF_16BE"+text); 
       charBuffer = StandardCharsets.UTF_16LE.decode(paramByteBuffer);
       text = charBuffer.toString();
       System.out.println("UTF_16LE"+text); 
       charBuffer = StandardCharsets.US_ASCII.decode(paramByteBuffer);
       text = charBuffer.toString();
       System.out.println("US_ASCII"+text); 
一切都返回空数据


解码字节缓冲区数据的方法有哪些?

您可以执行以下操作:

String val = new String(paramByteBuffer.array());

是受支持的字符集列表

简单地说就是
HeapByteBuffer
的方法

返回总结此缓冲区状态的字符串

换句话说,它会回来

java.nio.HeapByteBuffer[pos=0 lim=3 cap=3]
显示字节缓冲区的位置、限制和容量


在这种情况下,您的
ByteBuffer
的容量可以再增加3个字节。每个
Charset#decode
调用都会消耗
ByteBuffer
,而您不会/it,因此后续调用不会消耗更多字节。换句话说,所有这些字符串都是空的。

缓冲区使用起来有点棘手,因为它们有一个当前状态,在访问它们时需要考虑到这一点

你想把

 paramByteBuffer.flip();
在每次解码之前,将缓冲区置于您希望解码读取的状态

e、 g


什么是
parabytebuffer
?它是什么?它是一个字节缓冲区数据,但不确定格式。尽管如此,它只返回一些垃圾符号。你应该预料到这一点。不同的字符集对每个字符都有不同的值。您需要知道数据是用哪个字符集编码的。