确定Intent.STREAM_EXTRA(Android)的内容长度

时间:2010-07-11 11:04:14

标签: android stream android-intent

假设应用程序通过android.intent.action.SEND过滤器调用来获取内容流。还假设Uri和流是这样收到的:

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

现在,如何在不读取整个流的情况下确定内容的总长度?它甚至可能吗? in.available()不一定准确,所以我想我必须先阅读流,直到结束,第一次?

内容可能非常大,例如大约50MB或更多。所以,我宁愿只阅读一次。

1 个答案:

答案 0 :(得分:0)

您无法在不读取数据的情况下确定数据量;但是,如果您是输入源,则可以通过其他额外的长度传递长度。

我会读入ByteArrayOutputStream,然后调用toByteArray()来获取结果字节数组。您不需要提前定义大小(尽管如果您知道它可能是优化 。在许多情况下您不会这样做)