从ReadOnly java.nio.ByteBuffer中提取String

时间:2014-05-08 20:42:11

标签: java bytebuffer

如何从只读的ByteBuffer中提取字符串?我无法使用ByteBuffer.array()方法,因为它会抛出ReadOnlyException。我是否必须使用ByteBuffer.get(arr [])并将其复制出来以读取数据并创建字符串?似乎浪费了必须创建一个副本只是为了阅读它。

2 个答案:

答案 0 :(得分:17)

您应该可以使用Charset.decode(ByteBuffer)ByteBuffer转换为CharBuffer。然后只需拨打toString()即可。示例代码:

import java.nio.*;
import java.nio.charset.*;

class Test {
   public static void main(String[] args) throws Exception {
       byte[] bytes = { 65, 66 }; // "AB" in ASCII
       ByteBuffer byteBuffer =
           ByteBuffer.wrap(bytes).asReadOnlyBuffer();
       CharBuffer charBuffer = StandardCharsets.US_ASCII.decode(byteBuffer);
       String text = charBuffer.toString();
       System.out.println(text); // AB
   }
}

答案 1 :(得分:0)

ReadOnly缓冲区无法访问数组,否则您可能会更改它。注意:String还有另一个副本作为char []。如果这是一个问题,我会重新考虑使用只读缓冲区。