关于通过uri获取文件的大小

来源:互联网 发布:mac解压rar软件 编辑:程序博客网 时间:2024/06/05 19:43

这个问题是在写手机 短信功能 通过短信来分享联系人的时候遇见的。

过程是在联系人中选择多个联系人,然后生成一个Vcard。将这个Vcard通过彩信来发送给别人。



短信中的处理是得到这个Vcard的URI。我要做的是在对Vcard操作之前,先判断它的大小,手机的彩信最大有一个MAX。

我查找的资料很多都是通过Cursor找到patch,并通过patch得到文件,然后得到文件的大小。但是不知到这个Vcard在数据库中的的参数,用cursor查找起来有些困难。

 InputStream input = context.getContentResolver().openInputStream(uri);int size = input.available();

这样就得到大小了。



available

public int available()              throws IOException
返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。下一个调用可能是同一个线程,也可能是另一个线程。一次读取或跳过此估计数个字节不会受阻塞,但读取或跳过的字节数可能小于该数。

注意,有些 InputStream 的实现将返回流中的字节总数,但也有很多实现不会这样做。试图使用此方法的返回值分配缓冲区,以保存此流所有数据的做法是不正确的。

如果已经调用 close() 方法关闭了此输入流,那么此方法的子类实现可以选择抛出 IOException

InputStreamavailable 方法总是返回 0

此方法应该由子类重写。

 


返回:
可以不受阻塞地从此输入流读取(或跳过)的估计字节数;如果到达输入流末尾,则返回 0
抛出:
IOException - 如果发生 I/O 错误。


而且通过查看源码应该是通过文件描述符获取文件的总大小,而并不是事先将磁盘上的文件数据全部读入流中,再获取文件总大小

0 0
原创粉丝点击