将 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 转换为 FileInputStream?
将文件和数据转换为 outputStream 并将 inputStream 转换为文件和数据
如何将 InputStream 转换为 DataHandler?