Определите длину содержимого Intent.STREAM_EXTRA (Android) - PullRequest
0 голосов
/ 11 июля 2010

Предположим, что приложение получает поток контента при вызове с помощью фильтра android.intent.action.SEND.Также предположим, что Uri и поток принимаются следующим образом:

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

Теперь, как я могу определить общую длину контента, не читая весь поток?Это вообще возможно?in.available () не обязательно точен, поэтому я предполагаю, что сначала мне нужно прочитать поток до конца, сначала?

Содержание может быть очень большим, например, около 50 МБ или более.Так что я бы предпочел прочитать его только один раз.

1 Ответ

0 голосов
/ 11 июля 2010

Вы не можете определить количество данных в потоке, не читая их; Вы можете, однако, передать длину с помощью какого-либо другого дополнения, если вы являетесь источником ввода.

Я бы прочитал в ByteArrayOutputStream и затем вызвал toByteArray () , чтобы получить результирующий байтовый массив. Вам не нужно определять размер заранее (хотя, возможно, это оптимизация , если вы знаете это . Во многих случаях вы этого не сделаете)

...