如何在libgdx中打开随机访问文件

时间:2013-12-15 18:17:45

标签: java android libgdx

我需要在libgdx中打开一个文件进行随机访问,即我需要能够seek()到文件的不同部分(不按顺序读取)。

使用libgdx我可以通过Gdx.files.internal()访问该文件,但libgdx的文件处理程序不支持seek()等随机访问方法。我尝试使用java.io.RandomAccessFile,但它生成异常No such file or directory,可能是因为文件内部存储在jar文件中。

如何使用java.io.RandomAccessFile`访问该文件,或者如何在libgdx中打开文件进行随机访问?

这需要适用于Android和桌面平台。

1 个答案:

答案 0 :(得分:1)

这不是Libgdx的限制。您无法对存储在JAR文件中的文件进行随机访问(因为它们是压缩的,您需要流式传输内容)。 (我找不到这方面的简明参考,但请查看JarFileZipFile的定义:它们只允许您创建流文件句柄。

Libgdx本身遇到了这个问题。它将本机库存储在.jar文件(libgdx-natives.jar)中。要使用这些文件,它会将它们提取到本地文件系统并从那里使用它们。请参阅SharedLibraryLoader.java

据我所知,有三种解决方法可供选择:

  1. 无需在代码中随机访问。
  2. 将文件从JAR流式传输到内存中,然后随机访问它
  3. 将文件从JAR复制到local(私有)存储或临时存储(希望这可以完成一次而不是在每次运行应用程序时重新完成)。