从只读的java.nio.ByteBuffer中提取字符串

12

如何从只读的ByteBuffer中提取String?我不能使用ByteBuffer.array()方法,因为它会抛出ReadOnlyException异常。我是否必须使用ByteBuffer.get(arr[])方法来读取数据并创建一个String?这样做似乎很浪费资源,需要创建一个副本来进行读取。

2个回答

22

你应该能够使用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
   }
}

0

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


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