tsk*_*eah 5 java memory-management filechannel java-7
我正在研究一个sc2replay解析工具.我在MPQLIB http://code.google.com/p/mpqlib/之上构建它
不幸的是,该工具使用文件通道来读取bzip文件并使用 map(MapMode.READ_ONLY, hashtablePosition, hashTableSize);
调用该函数后关闭文件通道不会在该过程中释放该文件.具体来说,我无法重命名/移动文件.
问题出现在Java 7中,它在Java 6上运行良好.
这是一个复制它的简单代码片段:
FileInputStream f = new FileInputStream("test.SC2Replay");
FileChannel fc = f.getChannel();
fc.map(MapMode.READ_ONLY, 0,1);
fc.close();
new File("test.SC2Replay").renameTo(new File("test1.SC2Replay"));
Run Code Online (Sandbox Code Playgroud)
注释掉fc.map将允许您重命名该文件.
PS从这里我应该关闭FileChannel吗?
它声明您不需要关闭文件通道和文件流,因为关闭一个将关闭另一个.我也试过关闭其中一个或两个,但仍然没有奏效.
在Java 7上使用FileChannel.map读取数据后是否有重命名文件的解决方法,因为现在每个人似乎都有Java 7?