2017-02-14 9 views
1

これらは実際には、メモリマップされたファイルの操作方法に関する3つの質問です。私はうまくいったけど、権威ある答えが足りない。 ByteBufferが好きな私の私が取得サイズ変更、フラッシング、閉じるByteBuffer

は次のとおりです。次

サイズ変更
raf = new RandomAccessFile(file, isReadonly ? "r" : "rw"); 
channel = raf.getChannel(); 
buffer = channel.map(mode, 0, channel.size()); 

は、raf.getChannel()を呼び出さずに

raf.setLength(newLength); 
channel = raf.getChannel(); 

を動作するようだが、はそれが本当に正しいですか?


Javadocによると、forceを呼び出すと(私はローカルドライブを使用しています)、それをフラッシュする必要があります。私はちょうど、それが失敗した場合に何が起こるかをIOExceptionと宣言しているのだろうか?


私は何を閉じる必要がありますか? RandomAccessFileFileChannel、またはその両方前にflushまたはMappedByteBuffer.forceと呼ぶ必要がありますか?リサイズのために

答えて

0

は、以下がraf.getChannel()を呼び出すことなく

raf.setLength(newLength); 
channel = raf.getChannel(); 

を動作するようですが、それは本当に正しいですか?

はい。チャンネルを再取得する必要はありません。 setLength()の後も有効です。

Javadocによれば、force()を呼び出すと、それをフラッシュする必要があります(私はローカルドライブを使用しています)。私はちょうどそれがないと宣言することが来るのだろうかIOExceptionとそれが失敗した場合はどうなりますか?

ここでは、MappedByteBuffer.force()について話しているようです。私はデザイナーの選択肢を説明することはできません。

閉じる必要がありますか? RandomAccessFile、FileChannel、またはその両方?

いずれかです。

前にflush()またはMappedByteBuffer.force()と呼ぶ必要がありますか。

flush()はありません。必要に応じてforce()に電話することもできます。そうしないと、変更が遅れることがあります。

関連する問題