Veamos por qué podríamos necesitar ficheros de acceso aleatorio. Consideremos el formato de archivo conocido como "zip". Los archivos Zip contienen ficheros que normalmente están comprimidos para ahorrar espacio. Estos archivos también contienen una "entrada de directorio" que indica donde comienzan los distintos ficheros contenidos dentro del archibo Zip:
Ahora supongamos que queremos extraer un fichero específico de un archivo Zip. Si utilizaramos un canal de acceso secuencial, tendría que hacer lo siguiente:
La clase RandomAccessFile del paquete java.io implementa un fichero de acceso aleatorio.
Al contrario que las clases de canales de I/O de java.io, RandomAccessFile se utiliza tanto para leer como para escribir ficheros. Se puede crear el RandomAccessFile con diferentes argumentos dependiendo de lo que se intente hacer, leer o escribir.
RandomAccessFile está de alguna forma desconectado de los canales de I/O de java.io -- no desciende de las clases InputStream o OutputStream. Esto tiene alguna desventaja en que no se pueden aplicar los mismos filtros a RandomAccessFiles como se puede hacer con los otros canales. Sin embargo, RandomAccessFile implementa los interfaces DataInput y DataOutput, por lo que se podría de hecho diseñar un filtro que trabajando con DataInput o DataOutput podría trabajar (de alguna forma) con ficheros de acceso secuencial (los únicos que implementan DataInput o DataOutput) como con cualquier RandomAccessFile.