假设应用程序通过android.intent.action.SEND过滤器调用来获取内容流。还假设Uri和流是这样收到的:
Uri contentUri = (Uri) extras.get(Intent.EXTRA_STREAM);
InputStream in = getContentResolver().openInputStream(contentUri);
现在,如何在不读取整个流的情况下确定内容的总长度?它甚至可能吗? in.available()不一定准确,所以我想我必须先阅读流,直到结束,第一次?
内容可能非常大,例如大约50MB或更多。所以,我宁愿只阅读一次。
答案 0 :(得分:0)
您无法在不读取数据的情况下确定数据量;但是,如果您是输入源,则可以通过其他额外的长度传递长度。
我会读入ByteArrayOutputStream,然后调用toByteArray()来获取结果字节数组。您不需要提前定义大小(尽管如果您知道它可能是优化 。在许多情况下您不会这样做)