获取Java InputStream后面的文件的字节数

时间:2011-12-14 13:57:32

标签: java bytearray inputstream

正如标题所说,我需要知道文件有多少字节是在InputStream“后面”。 我不想下载所有字节和计数(需要很长时间)。我只需要知道文件有多少字节。

像这样:

int numberOfBytes = countBytes(inputStream);

所以,我需要一个countBytes(InputStream inputStream)的实现

2 个答案:

答案 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,但这是留给读者的一个练习。