You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否使用InputStream.available()计算文件大小?选InputStream还是ParcelFileDescriptor?

文件大小计算相关问题解答

1. 能否使用InputStream.available()方法计算文件大小?

绝对不行。available()的作用是返回当前输入流可以无阻塞读取的字节数,并非文件的总大小。比如网络流、压缩流这类非本地文件流,它只能返回当前缓存里的字节数,和实际总大小完全不符;就算是本地文件的FileInputStream,虽然某些场景下可能碰巧返回总大小,但这并不是API的规范行为,换个环境或流实现就会出错,完全不能用来计算文件总大小。

2. 我应当使用InputStream还是ParcelFileDescriptor来计算文件大小?已知InputStream的速度比ParcelFileDescriptor更快。

首先得明确:如果只是为了获取文件大小,ParcelFileDescriptor.getStatSize()才是靠谱的选择,而且效率一点不低——它直接读取文件系统的元数据,根本不需要打开流读取内容。

你说InputStream速度更快,但那是针对读取文件内容的场景,而这里是计算文件大小。用available()拿大小本身就是错误的,哪怕速度再快,结果不对也毫无意义。如果你的业务里已经打开了InputStream用来读文件,同时需要获取大小,那最好还是通过ParcelFileDescriptor或者File类的length()方法来获取,别依赖available()。

两种实现代码

public static long get_file_size_using_stream(InputStream is) {
    return is.available();
}

public static long get_file_size_using_pdf(ParcelFileDescriptor pfd) {
    return pfd.getStatSize();
}

内容的提问来源于stack exchange,提问作者drj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 05:54:17