正如标题所说,我需要知道文件有多少字节是在InputStream“后面”。 我不想下载所有字节和计数(需要很长时间)。我只需要知道文件有多少字节。
像这样:
int numberOfBytes = countBytes(inputStream);
所以,我需要一个countBytes(InputStream inputStream)的实现
答案 0 :(得分:8)
除了通过使用整个流并计算字节数之外,你不能(没有API)。
有available()
方法,但它明确地没有按照你的要求做到:
请注意,虽然InputStream的某些实现将返回流中的总字节数,但很多不会。
如果InputStream
与文件相关联(而不是套接字),或许您可以使用不同的API来获取其大小?
答案 1 :(得分:2)
您能否以某种方式利用skip()
来估算文件的大小?
int bytes = 1024; // Chunk size for skipping. Adjust as necessary
try {
int skipped = 0;
while(stream.available()) {
stream.skip(bytes);
skipped += bytes;
// Elided...do something with skipped
}
} catch(IOException ex) {
// Handle a skip that's too big
}
我也确定你可以让这个循环变得更聪明并避免不可避免的IOException
,但这是留给读者的一个练习。