how do i know which filestream supports seek in Java

fileinputstream, inputstream, java, seek

Solution

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.

Problem

java.io.InputStream.skip() says "Throws: IOException - if the stream does not support seek, or if some other I/O error occurs." how do i know which filestream supports seek? when google i find Seekable, but i can see that simple FileInputStream, ByteArrayInputStream ... also supports skip(), i mean does not give IOException; they does not extend Seekable.

Original source