2010-07-11 100 views
0

假設應用程序通過使用android.intent.action.SEND過濾器調用來獲取內容流。還假設URI和流被接收這樣的:確定Intent.STREAM_EXTRA(Android)的內容長度

Uri contentUri = (Uri) extras.get(Intent.EXTRA_STREAM); 
InputStream in = getContentResolver().openInputStream(contentUri); 

現在,我怎麼能確定內容的總長度,而不必讀取整個流?它甚至有可能嗎? in.available()不一定是準確的,所以我想我必須先閱讀流,直到最後,第一?

內容可能非常大,例如大約50MB或更多。所以,我寧願只讀一次。

回答

0

無法確定流中的數據量而不讀取它;如果您是輸入源,則可以通過其他額外的長度來傳遞長度。

我會讀入ByteArrayOutputStream然後調用toByteArray()來獲得結果字節數組。你不需要事先定義大小(雖然如果你知道它可能是一個優化。在很多情況下你不會)