2010-07-11 97 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()来获得结果字节数组。你不需要事先定义大小(虽然如果你知道它可能是一个优化。在很多情况下你不会)