2010-07-11 2 views
0

Предположим, что приложение получает поток контента, вызывая его с помощью фильтра android.intent.action.SEND. Также предположим, что Ури и поток поступает так:Определите длину содержимого Intent.STREAM_EXTRA (Android)

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

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

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

ответ

0

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

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

Смежные вопросы