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 的第三个参数是要停止读取的文件的字节,而实际上它是要读取的字节数。改变这个可以解决问题。

于 2013-10-15T08:18:27.673 回答