Java 中 ByteBuffer 转 String,eclipse编译 无内容 ,javac 编译运行有内容

2025-01-03 22:20:45
推荐回答(3个)
回答1:

我不确定javac编译有内容是怎么回事,但是加上你注释那一行之后没有cd是应该的。因为你每次call decode,你的buffer会被从position开始完整的遍历一遍,当遍历完之后,buffer中的position会被置为4(在你的程序中). 当一个position已经是最后一位的buffer再次被扔给decode 方法,返回的自然就是一个没有内容的charBuffer了。

想打出cd,你可以在注释那行后面加一行,
buffer.position(0); 重置position

回答2:

实际项目中会用到ByteBuffer进行数据的传输,因此会用涉及到将ByteBuffer转换为String的过程。
以下是实现该过程的方法:
public static String byteBufferToString(ByteBuffer buffer) {
CharBuffer charBuffer = null;
try {
Charset charset = Charset.forName("UTF-8");
CharsetDecoder decoder = charset.newDecoder();
charBuffer = decoder.decode(buffer);
buffer.flip();
return charBuffer.toString();
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
需要说明的是,flip方法会将缓冲区的当前位置”重置”到缓冲区的开始处.这样可以保证传入的对像被其他方法使用时读取的数据完整性.

回答3:

charBuffer new一下,不要等于null,试试