0

私は Scala で MappedByteBuffer を使用しています (ただし、この質問は Java にも関連しています) 約 400MB のファイルを開きます。コード スニペットを次に示します。

val file = new java.io.File( ... )
val stream = new java.io.FileInputStream( file )
val buffer = stream.getChannel.map(java.nio.channels.FileChannel.MapMode.READ_ONLY, 0, file.length )

ただし、これは次のエラーで失敗します。

java.io.IOException: Channel not open for writing - cannot extend file to required size

私が読んだところによると、最大 2GB のファイルをマップできるはずです。JVM 設定に関しては、-Xmx4G が設定されているため、ファイルを開けない理由がわかりません。テストとして、ファイルの小さなセクション (~1mb) をマップしましたが、これは正しく機能しました。

誰にもアイデアはありますか?

4

1 に答える 1

0

map の 3 番目の引数が読み取りを停止するファイルのバイトであると仮定して、オンラインで見た例を誤解していましたが、実際には読み取るバイト数です。これを変更すると問題が解決します。

于 2013-10-15T08:18:27.673 に答える