Frage

Ich habe eine Datei, die ich über 'FileChannel.map ()' in den Speicher abbilde.Es scheint jedoch etwas seltsam, wenn Sie eine Zeichenfolge lesen, um Folgendes zu tun:

1) read a int for the string length
2) allocate a byte[length] object
3) use .get to read length bytes
4) convert the byte[] to a string

Jetzt weiß ich aus meinem C ++ - Hintergrund, dass dem Benutzer Speicherzuordnungsdateien als Zeiger auf den Speicher übergeben werden.Gibt es also eine gute Möglichkeit, die Verwendung eines Byte-Arrays zu überspringen und die Zeichenfolgenkonvertierung direkt aus dem zugeordneten Speicher zu entfernen?

War es hilfreich?

Lösung

Ich schlage vor:

MappedByteBuffer mapped = fileChannel.map(mode, position, size);
String s = new String(mapped.array());

Es ist auch möglich, den mapped.asCharBuffer () zu verwenden und die Zeichen auf diese Weise abzurufen.

Andere Tipps

Letztendlich nein.Es gibt jedoch eine Möglichkeit, die Daten als Zeichen anzuzeigen.Schauen Sie sich ByteBuffer.asCharBuffer () an.

Intern macht die asCharBuffer () -Methode dasselbe, was Sie vorschlagen, jedoch char-by-char.

Es führt kein Weg daran vorbei, dass String eine private Kopie der Daten wünscht.Zeichenfolgen sind unveränderlich, und wenn ein gemeinsam genutztes Array verwendet wird, können Sie dies unterbrechen.Es ist bedauerlich, dass es keinen String(CharSequence) oder String(ByteBuffer)-Konstruktor gibt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top