RandomAccessFile
extends Object
, and does not extend InputStream
.
If you want get an InputStream
from a RandomAccessFile
I think implementing a wrapper class is your simplest bet. Luckily the only abstract method of InputStream
is read()
.
RandomAccessFile implements DataInput which inturn DataInputstream & InputStream
DataInputStream
is a subclass of InputStream
, which also happens to implement DataInput
. The inheritance and interface implementation tree looks like this:
InputStream DataInput
\ / \
\ / \
\ / \
DataInputStream RandomAccessFile
You could use a DataInputStream
anywhere where you could use an InputStream
or a DataInput
. You could use a RandomAccessFile
anywhere where you could use a DataInput
.
But you can't go up and then down in the inheritance hierarchy like this using casts. In particular, casting a class to a subclass (or an interface to an implementation) will raise a ClassCastException
unless the object happens to be an instance of the child class.
Even though two classes happen to extend Object
that doesn't mean they are interchangeable.
RandomAccessFile
is that it isn't a stream (it's not sequential). Why would you want to change that? Just make aFileInputStream
. – SarsenIOUtils.copyLarge
from apache commons that usesInputStream
, so you seek yourRandomAccessFile
and then create wrapperInputStream
, but again there is no reason why couldn'tRandomAccessFile
extendInputStream
... – People