2014-05-08 14 views
8

如何從只讀ByteBuffer中提取字符串?我不能使用ByteBuffer.array()方法,因爲它拋出了ReadOnlyException。我是否必須使用ByteBuffer.get(arr [])並將其複製出來以讀取數據並創建一個String?看起來很浪費,爲了閱讀它而必須創建一個副本。從ReadOnly中提取字符串java.nio.ByteBuffer

回答

16

您應該可以使用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緩衝區不能讓您訪問數組,否則您可能會更改它。注意:該字符串有另一個副本作爲char []。如果這是一個問題,我會重新考慮使用只讀緩衝區。