Java 随机访问android资产

Java 随机访问android资产,java,android,random,inputstream,assets,Java,Android,Random,Inputstream,Assets,我想知道如何随机访问android资产。AssetManager类提供方法“open”,您可以将AssetManager.ACCESS\u随机传递给该方法。文档中说,当随机传递访问权限时,不能在文件中前后搜索(特别是我需要的是向后搜索)。 但是,无论请求哪种访问模式,open方法始终返回InputStream对象。 所以我的问题是:如何在不提供此类方法的InputStream上调用seek方法?我必须将InputStream转换到哪个类?我在网上搜索这个问题已经有一段时间了,但是我找不到任何对我

我想知道如何随机访问android资产。AssetManager类提供方法“open”,您可以将AssetManager.ACCESS\u随机传递给该方法。文档中说,当随机传递访问权限时,不能在文件中前后搜索(特别是我需要的是向后搜索)。 但是,无论请求哪种访问模式,open方法始终返回InputStream对象。 所以我的问题是:如何在不提供此类方法的InputStream上调用seek方法?我必须将InputStream转换到哪个类?我在网上搜索这个问题已经有一段时间了,但是我找不到任何对我有帮助的东西

谢谢

看看,方法
open(stringfilename,intaccessmode)
实际上返回一个
AssetInputStream

我没有测试它,但是您可以将
open()
方法的
InputStream
强制转换为您正在查找的
AssetInputStream
。特别是
skip(long n)
方法将允许您跳过文件的第一个
n
字节

你可以试试看它是否有效


编辑:如果你想完全随机访问这个文件,我想这是不可能的。有关更多信息,请参阅。

将资产文件复制到缓存/temp,然后打开它进行随机访问,类似这样的操作(添加错误/写入错误处理)

File outputDir=context.getCacheDir();
File destFile=新文件(outputDir,“资产文件名”);
OutputStream dest=新文件OutputStream(destFile,true);
InputStream src=context.getAssets().open(“资产目录/asset文件名”,访问流媒体);
字节[]buff=新字节[100*1024];
对于(;;)
{
int cnt=src.read(buff);

如果(cnt)谢谢你的回答,但我甚至在
AssetInputStream
中也没有看到任何类似“seek”的方法。或者我的眼睛上有一些西红柿吗?:对不起,有一刻我忘了你也希望能够向后走。我相应地编辑了我的答案。
File outputDir = context.getCacheDir();
File destFile = new File(outputDir, "asset_filename");
OutputStream dest = new FileOutputStream(destFile, true);
InputStream src = context.getAssets().open("asset_directory/asset_filename", ACCESS_STREAMING);
byte[] buff = new byte[100*1024];
for(;;)
{
    int cnt = src.read(buff);
    if(cnt <= 0)
        break;
    dest.write(buff, 0, cnt);
}
dest.flush();
dest.close();
assetFile = new RandomAccessFile(destFile, "r");