An interface to a RandomAccessFile on the FileServer, this class does not descend from RandomAccessFile but rather implements the DataInput and DataOutput interfaces and additionally provides the getFilePointer(), seek(), and length() functions of RandomAccessFile.
A file may be opened for either read-only or read-write access. All conversion of Java base types (such as readDouble() or writeLong()) are done on the client side; data is both fetched and sent across the network in blocks. For efficiency, this class keeps a buffer cache of recently used blocks, utilizing a Least Recently Used replacement policy. The cache also associates a dirty bit with each block, so if a block need not be returned to the server if it is never written to.