gpt4 book ai didi

调用 map 方法后 Java 7 文件 channel 未正确关闭

转载 作者:搜寻专家 更新时间:2023-10-31 20:29:41 25 4
gpt4 key购买 nike

我正在研究 sc2replay 解析工具。我在 MPQLIB 之上构建它 http://code.google.com/p/mpqlib/

不幸的是,该工具使用文件 channel 来读取 bzip 文件,并使用 map(MapMode.READ_ONLY, hashtablePosition, hashTableSize);

调用该函数后,关闭文件 channel 不会释放进程中的文件。具体来说,我无法重命名/移动文件。

问题出现在 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"));

注释掉 fc.map 将允许您重命名该文件。

附言从这里Should I close the FileChannel?

它声明您不需要同时关闭 filechannel 和 filestream,因为关闭一个将关闭另一个。我也尝试关闭其中一个或两个,但仍然没有用。

在 Java 7 上使用 FileChannel.map 读取数据后是否有重命名文件的解决方法,因为现在似乎每个人都有 Java 7?

最佳答案

你好,

似乎是 FileChannel.map 导致了 Java 7 上的问题。如果您使用 FileChannel.map,则无法再关闭该文件。

一个快速解决方法是不使用 FileChannel.map(MapMode.READ_ONLY, position, length)

你可以使用

ByteBuffer b = ByteBuffer.allocate(length); 
fc.read(b,position);
b.rewind();

关于调用 map 方法后 Java 7 文件 channel 未正确关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13065358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com