代码之家  ›  专栏  ›  技术社区  ›  Niklas Mertsch

从jar存档中获取randomAccessFile

  •  -1
  • Niklas Mertsch  · 技术社区  · 6 年前

    总结:

    我有一个程序我想作为一个单一的 jar 文件。

    它依赖于三个二进制格式的大资源文件(每个700MB)。通过索引可以很容易地访问文件内容,因此我的解析器将这些文件读取为 RandomAccessFile -对象。

    所以我的目标是从 罐子 通过 File 物体。

    我的问题:

    当从我的文件系统访问资源文件时,没有问题,但我的目标是将它们打包到 罐子 程序的文件,所以用户不需要自己处理这些文件。

    到目前为止,我找到的唯一方法是访问 罐子 是通过 InputStream (产生者 class.getResourceAsStream() ,这对我的应用程序完全没有用处,因为从头到尾读取这些文件要比使用 随机存取文件 .

    出于同样的原因,将文件内容复制到文件中、读取并在运行时删除是没有选择余地的。

    有人能确认没有办法实现我的目标或提供一个解决方案(或一个提示,让我自己解决)?

    到目前为止我发现:

    我发现 this 如果我明白了答案,它会说没有办法解决我的问题:

    jar文件中的资源不是文件,因为操作系统可以通过普通的文件访问api直接访问它们。

    而且由于java.io.file完全代表了那种文件(即在操作系统中看起来像文件的东西),所以它不能用于引用.jar文件中的任何内容。

    一种可能的解决方法是将资源提取到一个临时文件中,并用一个文件引用它。

    我认为我可以遵循它背后的推理,但是它已经超过八年了,当我在文件系统和档案方面还没有受过很好的教育的时候,我知道Java语言从那时起已经发展了很多,所以也许还有希望吗?:)

    可能无用的背景信息:

    这些文件是 2bit 格式和我使用 TwoBitParser biojava 通过包装类 TwoBitFacade ?. The Javadocs 可以找到 here here .

    1 回复  |  直到 6 年前
        1
  •  1
  •   user207421    6 年前

    资源不是文件,它们存在于jar文件中,jar文件不是随机访问介质。