2014-05-08 9 views
8

Jak wyodrębnić ciąg z ByteBuffer tylko do odczytu? Nie mogę użyć metody ByteBuffer.array(), ponieważ generuje ona wyjątek ReadOnlyException. Czy muszę użyć ByteBuffer.get (arr []) i skopiować go, aby odczytać dane i utworzyć ciąg? Wydaje się marnotrawstwem, że trzeba utworzyć kopię tylko po to, aby ją przeczytać.Wyodrębnij ciąg z ReadOnly java.nio.ByteBuffer

Odpowiedz

16

Powinieneś być w stanie użyć Charset.decode(ByteBuffer), który przekształci ByteBuffer w CharBuffer. Następnie po prostu zadzwoń pod numer toString(). Przykładowy kod:

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

Bufor ReadOnly nie daje dostępu do całej tablicy, w przeciwnym razie można go zmienić. Uwaga: Ciąg ma jeszcze jedną kopię jako char []. Jeśli jest to problemem, ponownie rozważę użycie bufora tylko do odczytu.