VirtualBuffer
Name: Clase VirtualBuffer
Author: Miguel Colom (miguelcoARROBAarrakisPUNTOes)
Description:
VirtualBuffer es una clase que simula el acceso a un buffer en el
que se ha leído el contenido de un fichero.
La idea surgió un día que tuve que programar una funcion que tenía
que acceder a los datos almacenados en un fichero de sonido, de
manera que aparentemente la forma mas sencilla de hacerlo es crear
un buffer de un tamaño adecuado, leer el fichero entero, o las partes
de interés, y luego acceder a los datos
El problema que tiene esto es que si el el fichero es demasiado grande,
consecuentemente el buffer se hace enorme, lo cual significa un desperdidio
en memoria RAM, y sobre todo, un enlentecimiento de las operaciones, porque
el sistema operativo tiende a paginar en la memoria virtual para poder
acceder a los datos.
La solucion propuesta es esta clase, que permite simular el funcionamiento
de ese buffer gigante, sin tener un coste exagerado de recursos.
El usuario solo ha de preocuparse de especificar el nombre del fichero,
y de leer las posiciones que le interesen, y la clase ya se encarga de
gestionar el acceso al fichero, y las demás operaciones.
La forma de utilizarlo es sencilla:
1) Crear una instancia de la clase.
Existen dos constructores,
VirtualBuffer (char * fichero, unsigned _ventana), que permite
especificar el fichero y un tamaño de ventana concreto, y
VirtualBuffer::VirtualBuffer (char * fichero), en la que el usuario
sólo ha de especificar el nombre del fichero, y la clase gestiona
todo lo demás.
2) Acceder a los datos.
Se hace de la misma manera como se accede a un array,
con el operador [].
En fin, cosas que quedan por hacer:
* Sobrecargar el operador[] para permitir escrituras.
* Mejorar el funcionamiento de gestión de ventana, para poder
hacer lecturas optimizadas de adelante a atrás.
Date: 31/01/04 19:39
Copyright: GPL
Código
Puedes ver el fichero de cabecera y la implementación de la clase en HTML:
Cabecera virtualBuffer.h
Implementación de la clase virtualBuffer.cpp
€
o descargarte un ZIP con lo anterior y un ejemplo.
virtualbuffer.zip
Para compilarlo, simplemente ejecutar make.