我在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据我所知,你应该能够映射一个高达2 2GB的文件。就我的JVM设置而言,我已经设置了-Xmx4G,所以我不明白为什么它无法打开该文件。作为测试,我映射了文件的较小部分(~1mb),它工作正常。
有谁有什么想法吗?
发布于 2013-10-15 16:18:28
我误读了我在网上看到的示例,假设map的第三个参数是要停止读取的文件的字节,而实际上它是要读取的字节数。改变这一点可以解决这个问题。
https://stackoverflow.com/questions/19376141
复制相似问题