I/O: Leer y Escibir

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.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR

SIGUIENTE ARTÍCULO