2011-04-24 191 views
4

我遇到了問題 - 我需要從Android APK(例如key.keystore)讀取SecretKey,因爲我的應用程序必須將其讀取爲FileInputStream,但是從資產我只能獲取inputStream。如何將inputStream轉換爲FileInputStream?或者還有其他的方式,如何從例如文件訪問文件。資源作爲fileInputStream?將inputStream轉換爲FileInputStream?

感謝

回答

7

爲什麼你需要專門的FileInputStream?通常,您不必關心InputStream的底層實現,您只需從中讀取即可。也許你的實現應該是InputStream不可知的。

+0

你是對的,16小時連續編程讓我生氣:-) – Waypoint 2011-04-24 18:39:57

2

我不認爲這是可能的,因爲一個FileInputStream簡直就是文件的InputStream。它可以爲你定義的文件獲取InputStream,然後你使用普通的InputStream。

Android已經爲你做了這份工作。那麼爲什麼你需要一個FileInputStream?

+0

你可能想要一個FileInputStream,因爲你想知道文件的長度,除非有一種方法我還沒找到。 – fangster 2014-12-22 14:10:05

+1

我沒有在FileInputStream上看到任何'getLength()' - 方法,所以不知道你在做什麼。另外,如果它是*您*放入APK的資產,則知道它是文件大小。 FileInputStream只是從「物理」文件獲取InputStream(讀取文件內容)的一種便捷方式。 – 2014-12-22 14:45:15

+0

對不起@ 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 2015-01-05 15:22:15

4

我想你指的是AssetManager.open(),它返回一個InputStream。無需將它「轉換」爲FileInputStream,只需獲取對InputStream的引用並使用它(如果需要,可將其包裝在BufferedInputStream中)。

相關問題