The only way to know for sure is to read the javadocs for any particular stream you're interested in. The inheritance hierarchy is quite bad there, but it's an old class.
Edit: I just read the javadoc, and while it seems that InputStream itself does implement it (with a naive read/discard implementation), it says
"Subclasses are encouraged to provide a more efficient implementation of this method. For instance, the implementation may depend on the ability to seek."
Now instead of throwing an IOException
if seeking isn't supported, subclasses could always use the default implementation. However, most likely due to backwards compatibility, this artifact of weird design has been left in.