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

9 浏览
0 Comments

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

如题所述,我需要知道一个InputStream“后面”的文件有多少字节。

我不想下载所有的字节并计算(太耗时了)。我只需要知道这个文件有多少字节。

就像这样:

int numberOfBytes = countBytes(inputStream);

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

0
0 Comments

在Java中,想要获取一个输入流(InputStream)所对应文件的字节数量,除非将整个流消耗掉并计算字节数,否则无法直接通过API获取。虽然有一个available()方法,但它明确表示不会返回你要求的字节数量。这是因为有一些InputStream的实现类会返回流中的总字节数,但也有很多实现类不会返回。如果这个InputStream是与一个文件关联的(而不是一个套接字),或许你可以使用其他的API来获取文件的大小。但是在这种情况下,这个InputStream是与一个套接字关联的,具体来说是通过Javamail获取的邮件附件。有人问是否找到了其他的解决方法,但是回答者表示已经记不清了。

0
0 Comments

Java中的InputStream类提供了skip()方法,可以用来跳过输入流中的字节。但是有一个问题,如何获取输入流中文件的字节数呢?有没有办法利用skip()方法来近似地获取文件的大小呢?

下面是一种可能的解决方法:

int bytes = 1024; // 跳过的块大小,根据需要进行调整
try {
    int skipped = 0;
    while(stream.available()) {
        stream.skip(bytes);
        skipped += bytes;
        // 省略...对skipped进行处理
    }
} catch(IOException ex) {
    // 处理跳过的字节数超过文件大小的情况
}

这段代码中,通过循环不断地调用skip()方法来跳过输入流中的字节,并累加跳过的字节数。这样就可以近似地获取文件的大小了。

不过这段代码还有改进的空间,可以更智能地处理跳过字节过多导致的IOException异常。具体的改进方式留给读者自己去尝试。

作者表示,他需要获取文件的准确字节数,而不是近似值。有人建议可以逐个字节地跳过,这样可以获取准确的文件大小。但是为什么需要知道准确的文件大小呢?

作者解释说,他正在将文件上传到Dropbox,并且Dropbox的API需要准确的上传字节数。所以他需要准确地获取文件的大小。

有了以上的解决方法,作者就可以通过输入流获取文件的字节数,并满足Dropbox API的需求了。

0