3

「FileChannel.map()」を介してメモリにマッピングしているファイルがあります。ただし、文字列を読み取って次のことを行うのは少し奇妙に思えます。

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

C++ のバックグラウンドから、メモリ マップされたファイルがメモリへのポインタとしてユーザーに渡されることを知っています。では、バイト配列の使用をスキップして、文字列変換をマップされたメモリからすぐに実行する良い方法はありますか?

4

3 に答える 3

4

私は提案します:

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

また、mapped.asCharBuffer() を使用して、この方法で文字を取得することもできます。

于 2011-04-29T20:00:38.523 に答える
3

最終的に、いいえ。しかし、データを文字として表示する方法があります。ByteBuffer.asCharBuffer() を見てください。

内部的には、 asCharBuffer() メソッドはあなたが提案しているのと同じことを行いますが、文字単位で行われます。

于 2011-04-29T19:50:40.767 に答える
1

データのプライベート コピーが必要な String を回避することはできません。文字列は不変であり、共有配列を使用すると、それが壊れる可能性があります。String(CharSequence)orString(ByteBuffer)コンストラクターがないのは残念です。

于 2011-04-29T19:50:56.440 に答える