gpt4 book ai didi

java - 是否有一种干净的方法来确定 RandomAccessFile 是否是只读的?

转载 作者:行者123 更新时间:2023-12-05 07:42:25 25 4
gpt4 key购买 nike

我正在寻找一种“好的”方法来确定 RandomAccessFile是只读的

非“好”方式包括:

  • 使用反射读取“rw”字段的值(与实现无关)
  • 读取一个字节,向后查找一个字节,写入字节(非线程安全)

我尝试编写一个空字节数组,但无论 RandomAccessFile 是以只读还是读写模式构造的,调用都会成功。


到目前为止我发现的一种可行方法是获得 FileChannel然后尝试创建读写映射。

RandomAccessFile raf = new RandomAccessFile("someFile.txt", "r");

raf.getChannel().map(MapMode.READ_WRITE, 0, 0);

在此示例中,尝试映射会抛出一个 NonWritableChannelException,然后可以捕获该异常并用于指示 RandomAccessFile 是只读的。


但是,我对上述方法有一些担忧。

  1. 该 API 当前不提供释放内存映射的方法,它由垃圾收集器处理,并且在某些操作系统(例如 Windows)上无法删除部分内存映射的文件
    (注意:我希望创建一个 size=0 和 position=0 的 map 可以避免 Windows 映射限制,但我还没有测试过)
  2. 根据 FileChannel.map()文档,创建 map 是一项有点昂贵的操作

最佳答案

获取 FileChannel 并尝试创建一个锁。如果 RAF 是只读的,它将失败。为什么是另一个问题。

但我同意@Andreas。这是一个你不应该问的问题。您的应用程序应该能够告诉自己它是如何打开文件的,而无需诉诸诡计。

关于java - 是否有一种干净的方法来确定 RandomAccessFile 是否是只读的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44554861/

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