2014-05-08 18 views
8

Wie extrahieren Sie eine Zeichenfolge aus einem schreibgeschützten ByteBuffer? Ich kann die ByteBuffer.array() -Methode nicht verwenden, da sie eine ReadOnlyException auslöst. Muss ich ByteBuffer.get (arr []) verwenden und es kopieren, um die Daten zu lesen und einen String zu erstellen? Es scheint verschwenderisch, eine Kopie zu erstellen, nur um sie zu lesen.Zeichenfolge aus ReadOnly extrahieren java.nio.ByteBuffer

Antwort

16

Sie sollten Charset.decode(ByteBuffer) verwenden können, die eine ByteBuffer in eine CharBuffer konvertieren wird. Rufen Sie dann einfach toString() an. Beispielcode:

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

Der ReadOnly-Puffer kann Ihnen keinen Zugriff auf das Array geben, sonst könnten Sie ihn ändern. Hinweis: Der String hat noch eine Kopie als char []. Wenn dies ein Problem ist, würde ich die Verwendung eines Nur-Lese-Puffers überdenken.

Verwandte Themen