将 inputStream 转换为 FileInputStream?

Posted

技术标签:

【中文标题】将 inputStream 转换为 FileInputStream?【英文标题】:Converting inputStream to FileInputStream? 【发布时间】:2011-08-11 22:46:36 【问题描述】:

我遇到了问题 - 我需要从 android APK(例如 key.keystore)读取 SecretKey,对于我的应用程序,它必须作为 FileInputStream 读取,但从资产中我只能获得 inputStream。如何或者有没有其他方法,如何从例如访问文件资源作为文件输入流?

谢谢

【问题讨论】:

【参考方案1】:

为什么你特别需要一个 FileInputStream?通常,您不必关心 InputStream 的底层实现,您只需从中读取即可。也许您的 实现应该与 InputStream 无关。

【讨论】:

你说得对,连续 16 小时的编程让我抓狂:-)【参考方案2】:

我认为您指的是返回 InputStream 的AssetManager.open()。无需将其“转换”为 FileInputStream,只需获取对 InputStream 的引用并使用它(如果需要,将其包装在 BufferedInputStream 中)。

【讨论】:

【参考方案3】:

我认为这是不可能的,因为 FileInputStream 只是文件的 InputStream。它会为您从定义的文件中获取 InputStream,之后您将使用普通的 InputStream。

Android 已经为您完成了这项工作。那么为什么需要 FileInputStream?

【讨论】:

你可能想要一个 FileInputStream 因为你想知道文件的长度,除非我还没有找到一种方法。 我在 FileInputStream 上没有看到任何 getLength()-method,所以不确定你在做什么。此外,如果它是 放入 APK 的资产,您就知道它的文件大小。 FileInputStream 只是一种从“物理”文件中获取 InputStream(读取文件内容)的便捷方式。 对不起@Lukas-Knuth,我自己搞糊涂了!但是,我正在使用未压缩资源的 FileInputStream 来完整读取其数据: AssetFileDescriptor afd = context.getResources().openRawResourceFd(R.raw.myresource); FileInputStream fis = afd.createInputStream();数据 = 新字节[(int)afd.getLength()]; DataInputStream dis = new DataInputStream(fis); dis.readFully(数据);披露.close();

以上是关于将 inputStream 转换为 FileInputStream?的主要内容,如果未能解决你的问题,请参考以下文章

将 InputStream 转换为 base64 字符串

将 inputStream 转换为 FileInputStream?

将文件和数据转换为 outputStream 并将 inputStream 转换为文件和数据

如何将 InputStream 转换为 DataHandler?

如何将 Reader 转换为 InputStream 并将 Writer 转换为 OutputStream?

如何将 InputStream 转换为 InputSource?