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

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

谢谢

【问题讨论】:

    标签: android inputstream fileinputstream


    【解决方案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();
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 2014-04-23
      • 2011-07-09
      • 2018-07-19
      • 1970-01-01
      • 2013-07-09
      相关资源
      最近更新 更多