使用FileChannel读取Android资产文件是否安全?

时间:2015-05-12 15:29:48

标签: android android-assets

我需要从我的应用中的asset文件夹中读取二进制文件,而我尝试这样做的方式是获取Channel

AssetFileDescriptor assetFd = context.getAssets().openFd("file.db");
FileChannel fileChan = assetFd.createInputStream().getChannel();

问题是AssetManager, AssetFileDescriptor是非常糟糕的文档类,并且以不可预测的方式表现(就像在我看来)。例如,如果您在上面的代码之后立即尝试获取fileChan.position(),那么您将无法获得0,在我的情况下,它将是976.在深入了解StackOverflow之后,我发现它是'正常行为,你需要知道资产被压缩成一些内部二进制形式,AssetFileDescriptor不是真正的文件描述符。 在我的情况下,我有一个文件结构,其中绝对字节位置存储在标题中,因此它似乎正确地读取它我还需要考虑assetFd.getStartOffset()

在阅读其文档后,我对方法AssetFileDescriptor.createInputStream的行为一无所知:

  

这将返回完整资产AssetFileDescriptor.AutoCloseInputStream或基础ParcelFileDescriptor.AutoCloseInputStream,具体取决于对象是代表文件的完整文件还是子部分。

缺乏对整个图片和文档的理解让我对使用这种方法感到紧张。

阅读大文件(超过1mb)时,我应该担心AssetFileDescriptor.createInputStream行为吗?在阅读资产文件时使用Channels是否安全?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

处理资产的最佳方法是将它们复制到内部或外部存储,然后使用您想要的任何方法读取它们。 感谢@pskink的帮助!