将inputStream转换为FileInputStream?

6

我遇到了一个问题 - 我需要从 Android APK (例如 key.keystore) 中读取 SecretKey,但是对于我的应用程序,它必须作为 FileInputStream 读取,但是从 assets 中获取的只有 inputStream。如何将 inputStream 转换为 FileInputStream?或者是否有其他方法可以从资源(例如 resources)中访问文件作为 fileInputStream?

谢谢

3个回答

8

为什么你需要特别使用FileInputStream?通常情况下,你不必关心InputStream的底层实现,只需要从中读取即可。也许你的实现应该是InputStream无关的。


你说得对,连续16小时的编程让我发疯了 :-) - Waypoint

4
我认为你指的是AssetManager.open(),它返回一个InputStream。没有必要将其“转换”为FileInputStream,只需获取InputStream的引用并使用它(如果需要,可以将其包装在BufferedInputStream中)。

3
我认为这是不可能的,因为FileInputStream仅仅是文件的InputStream。它会为您从定义的文件中获取一个InputStream,之后您将使用普通的InputStream进行操作。Android已经为您完成了这项工作。那么,您为什么需要FileInputStream呢?

你可能需要一个FileInputStream,因为你想知道文件的长度,除非有我还没有发现的方法。 - fangster
1
我在FileInputStream上没有看到任何getLength()方法,所以不确定你的意思。此外,如果这是一个放入APK中的资源,则知道它的文件大小。 FileInputStream只是从“物理”文件获取InputStream(以读取文件内容)的便捷方式。 - Lukas Knuth
抱歉@Lukas-Knuth,我自己搞混了!但是我正在使用未压缩资源的FileInputStream来完整读取它的数据: AssetFileDescriptor afd = context.getResources().openRawResourceFd(R.raw.myresource); FileInputStream fis = afd.createInputStream();data = new byte[(int)afd.getLength()];DataInputStream dis = new DataInputStream(fis); dis.readFully(data); dis.close(); - fangster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接