Hasta ahora los streams de entrada y salida de esta lecci�n han sido streams de acceso secuecnial--streams cuyo contenido debe ser le�do o escrito secuencialmente. A pesar de su increible utilidad, los ficheros de acceso secuencial son una consecuencia de un medio secuecial como una cinta magn�tica. Los ficheros de acceso aleatorio, por otro lado, permiten acceso no secuencial, o aleatorio, a los contenidos de un fichero.
Pero por qu� necesitamos 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. Los archivos Zip tambi�n contienen al final un directorio de entradas que indica donde empiezan los distintos ficheros contenidos enel archivo Zip.

Supongamos que queremos extraer un fichero espec�fico de un archivo Zip. Si usamos un stream de acceso secuencial, tenemos que hacer lo siguiente:
- Abrir el fichero Zip.
- Buscar a trav�s del fichero Zip hasta localizar el fichero que queremos extraer.
- Extraer el fichero.
- Cerrar el archivo Zip.
Como media, usando este algoritmo, tendr�amos que leer la mitad del archivo Zip antes de encontrar el fichero que queremos extraer. Podemos extraer el mismo fichero del archivo Zip de forma m�s eficiente usando la caracter�stica "seek" de un fichero de acceso aleatorio:
- Abrimos el fichero Zip.
- Saltamos al directorio de entradas y localizamos la entrada del fichero que queremos extraer del archivo Zip.
- Saltamos (hacia atr�s) dentro del archivo Zip a la posici�n del fichero a extraer.
- Extraemos el fichero.
- Cerramos el archivo Zip.
Este algoritmo es m�s eficiente porque s�lo tenemos que leer el directorio de entradas y el fichero que queremos extraer.
La clase RandomAccessFile del paquete java.io implementa ficheros de acceso aleatorio.
�Usar Ficheros de Acceso Aleatorio
Al contrario que las clases de streams de entrada y salida del paquete java.io, RandomAccessFile se usa tanto para leer como para escribir. Creamos un objeto RandomAccessFile con diferentes argumentos dependiendo si intentamos leer o escribir.
�Escribir Filtros para Ficheros de Acceso Aleatorio
RandomAccessFile est� desconectado de alguna forma de los streams de entrada y salida de java.io--no desciende de InputStream o OutputStream. Esto tiene algunas desventajas en que no se pueden aplicar los mismos filtros para RandomAccessFiles que aplicabamos a los streams. Sin embargo, RandomAccessFile implementa los interfaces DataInput y DataOutput, por eso podemos dise�ar un filtro que funcione con DataInput o con DataOutput, funcionar� con algunos ficheros de acceso secuencial (lo que implementen DataInput o DataOutput) as� como en cualquier RandomAccessFile.