当前位置: 首页 > 知识库问答 >
问题:

需要将AssetInputStream转换为FileInputStream

苏阳州
2023-03-14

我已经在我的计算机上实现了一个数据结构,现在我正试图将它移植到我的android应用程序中。我打开一个原始的。dat资源并获取一个InputStream,但我需要获取一个FileInputStream

FileInputStream fip = (FileInputStream) context.getResources().openRawResource(fileID);
FileChannel fc = fip.getChannel();
long bytesSizeOfFileChannel = fc.size();
MappedByteBuffer mbb = fc.map(FileChannel.MapMode.READ_ONLY, 0L, bytesSizeOfFileChannel);
...

上面的代码引发以下异常,因为InputStream无法强制转换为FileInputStream,但这正是我需要的:

java.lang.ClassCastException: android.content.res.AssetManager$AssetInputStream cannot be cast to java.io.FileInputStream

我所有的代码都是使用这个FileChannel和一个FileInputStream构建的,所以我想继续使用它。从上下文获得InputStream有什么办法吗。getResources()。openRawResource(fileID)然后将其转换为文件频道

在一些相关的帖子中,我无法为我的案例找到有效的解决方案,其中android:

如何将InputStream转换为FileInputStream

将inputStream转换为FileInputStream?

使用FileChannel写入任何InputStream?

共有2个答案

司马作人
2023-03-14

这可能会很晚,但我认为您可以从InputStream间接获取FileInputStream。我的建议是:从资源中获取输入流,然后创建一个临时文件,从中获取一个FileOutputStream。读取InputStream并将其复制到FileOutputStream。

现在临时文件包含了资源文件的内容,现在您可以从该文件创建FileInputStream。

我不知道这个特定的解决方案是否对您有用,但我认为它可以用于其他情况。例如,如果文件位于assets文件夹中,则使用以下方法获得InputStream和FileInputStream:

InputStream is=getAssets().open("video.3gp");
File tempfile=File.createTempFile("tempfile",".3gp",getDir("filez",0));

FileOutputStream os=newFileOutputStream(tempfile);
byte[] buffer=newbyte[16000];
int length=0;
while((length=is.read(buffer))!=-1){
os.write(buffer,0,length);
}

FileInputStream fis=new FileInputStream(tempfile);
张鹏鹍
2023-03-14

资源不是文件。因此,它不能用作内存映射文件。如果您有如此巨大的资源,它们需要内存映射,那么它们可能根本就不应该是资源。如果它们很小,内存映射就不会带来任何好处。

 类似资料:
  • 问题内容: 我的朋友正在尝试将某种计算作为上课的一项任务,但他遇到了一些麻烦…希望您能为他提供帮助。 问题在于他从用户那里得到了一个int的输入(这必须是任务的一部分)。他正在尝试在下面的代码中将其转换为double,但这是行不通的。无论如何结果都是int。 如果您需要更多说明,我会请他提供。提前致谢! 问题答案: 您必须将一个(或两个)参数传递给除法运算符: 由于您两次执行相同的计算,因此建议您

  • 问题内容: 我需要将(在ec2实例上)UTC时间转换为PST。我正在尝试这样做。 但是输出是: 为什么我没有得到正确的PST时间? 问题答案: 似乎对我有用:)-时区令人迷惑,慢慢地制定一个我实际上想做的事情的计划在大多数时候对我有帮助

  • 问题内容: 我正在使用jQuery的parseJSON()函数将json字符串插入变量中。问题是,它正在将我的数据变成一个对象,而不是一个二维数组。例如, 问题是,“名称”不应该是 键 (假设这是正确的术语)。相反,它应该是: 我将如何转换呢?还是有一个不同于使用for循环遍历数组索引的方法(但仍然可以像在2d数组中一样,以字符串形式访问键和值)。 编辑:这是一些正在使用的json(请注意,它的使

  • 问题内容: 我正在尝试将url参数传递给这样的django模板… 这是我的views.py文件中的调用行。persistConTemplate.html是我的模板的名称,request.GET是包含url参数的字典。 在模板中,我尝试使用像这样的参数之一… numItems是我在请求中这样发送的url参数之一… 当我尝试上面的for循环时,我得到这样的输出。 我期待并希望看到字图像印刷12次… 谁

  • 我需要使用JOLT转换将下面的输入转换为精确的输出。输入: 输出: 我尝试使用以下规格,但没有驱动到我需要的精确输出。规格: 任何帮助都将不胜感激。谢谢

  • 我正在尝试将excel文件转换为XSSFWorkbook,我有大约7000行和大约145列。将excel文件转换为第2行的XSSFWorkbook大约需要15分钟,代码如下:- 我不想向XFFSWorkbook添加7000行,只想在第2行转换时向XFFSWorkbook添加30行? 如果没有,如何减少将excel转换为XSSFWorkbook所需的时间?