简体   繁体   中英

Get the number of bytes of a file behind a Java InputStream

As the title says, I need to know how many bytes the file has that's "behind" an InputStream. I don't want to download all bytes and count (takes to long). I just need to know how many bytes the file has.

Like this:

int numberOfBytes = countBytes(inputStream);

So, I need an implementation for countBytes(InputStream inputStream)

Other than by consuming the entire stream and counting the bytes, you can't (there's no API for it).

There's the available() method, but it quite explicitly doesn't do what you're asking:

Note that while some implementations of InputStream will return the total number of bytes in the stream, many will not .

If the InputStream is associated with a file (and not, say, a socket), perhaps you could use a different API to get its size?

Could you leverage skip() in some way to approximate the size of the file?

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
}

I'm sure too that you could make this loop smarter and avoid the inevitable IOException , but that's an exercise left to the reader.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM