我在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),它正常工作。
有没有人有任何想法?
答案 0 :(得分:0)
我误读了我在网上看到的例子,假设map的第三个参数是要停止读取的文件的字节,而实际上它是要读取的字节数。改变这个解决了这个问题。