Question

J'ai un fichier je mappage en mémoire via « FileChannel.map () ». Cependant, il semble un peu bizarre lors de la lecture d'une chaîne à faire ce qui suit:

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

Maintenant, je sais de mon C ++ fond que les fichiers de mémoire mappées sont données à l'utilisateur comme des pointeurs vers la mémoire. Ainsi est-il un bon moyen de sauter à l'aide d'un tableau d'octets et juste le droit de go de conversion de chaîne de la mémoire cartographiée?

Était-ce utile?

La solution

Je suggère:

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

Il est également possible d'utiliser le mapped.asCharBuffer () et obtenir les caractères de cette façon.

Autres conseils

En fin de compte, non. Mais il y a un moyen d'obtenir une vue des données sous forme de caractères. Regardez ByteBuffer.asCharBuffer ().

En interne, la méthode asCharBuffer () fait la même chose que vous proposez, mais sur une base omble chevalier par-char.

Il n'y a pas de se déplacer à cordes vouloir une copie privée des données. Les chaînes sont immuables et si elle utilisait un tableau partagé, vous pouvez briser cela. Il est regrettable qu'il n'y a pas de constructeur String(CharSequence) ou String(ByteBuffer).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top