Tag: 内存映射文件

如何取消映射使用Java中的FileChannel映射的内存中的文件?

我使用FileChannel.map()将文件(“sample.txt”)映射到内存,然后使用fc.close()closures通道。 之后,当我使用FileOutputStream写入文件时,出现以下错误: java.io.FileNotFoundException:sample.txt(请求的操作不能在打开了用户映射部分的文件上形成) File f = new File("sample.txt"); RandomAccessFile raf = new RandomAccessFile(f,"rw"); FileChannel fc = raf.getChannel(); MappedByteBuffer mbf = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size()); fc.close(); raf.close(); FileOutputStream fos = new FileOutputStream(f); fos.write(str.getBytes()); fos.close(); 我认为这可能是由于文件仍然映射到内存,即使我closuresFileChannel 。 我对吗?。 如果是这样,我怎样才能从内存“取消映射”文件?(我无法find任何API的方法)。 谢谢。 编辑:看起来像(添加一个unmap方法)被提交作为RFE太阳一些回: http : //bugs.sun.com/view_bug.do?bug_id=4724038

内存映射文件和低内存情况

iOS平台在低内存情况下如何处理内存映射文件? 低内存的情况下,我的意思是当操作系统发送UIApplicationDidReceiveMemoryWarningNotification通知给应用程序中的所有观察者。 我们的文件被映射到内存使用+[NSData dataWithContentsOfMappedFile:] ,其文档的状态: 映射文件使用虚拟内存技术来避免将文件的页面复制到内存中,直到实际需要为止。 这是否意味着操作系统在不再使用的时候也会取消映射页面? 是否可以将页面标记为不再使用? 这个数据是只读的,如果这改变了场景。 如果我们直接使用mmap()呢? 这会更好吗?

何时使用内存映射文件?

我有一个应用程序通过networking接收大量数据,并将这些数据写入磁盘。 一旦所有块都被接收到,它们就可以被解码/重新组合成它们实际表示的单个文件。 我想知道是否使用内存映射文件是有用的 – 首先将单个块写入磁盘,其次是单个文件,所有这些文件都解码。 我自己的感觉是,对于第二种情况可能是有用的,任何人都有这个想法吗? 编辑:这是一个C#应用程序,我只计划一个x64版本。 (所以遇到“最大的可疑空间”问题应该是不相关的)