Para almacenar los datos en ficheros de manera persistente, una de las cosas que hay que tener en cuenta es que hay que utilizar ciertos artilugios para delimitar cuando termina un elemento y empieza uno nuevo, cuando termina y empieza un nuevo campo de datos, o cuando ya no hay más elementos en el fichero. Así por ejemplo, si se va a guardar un string the longitud indefinida, una posible solución será añadir un campo adicional que indique la longitud de dicho string en bytes en el fichero.
La siguiente figura, muestra una manera de guardar la información de fotos y autores en un único fichero. Podemos observar que inicialmente se reservan 4 bytes para indicar en el fichero el número total de fotos que tendremos en el fichero, y seguidamente tendremos la información de cada una de las fotos, incluida la información de su autor. Por cada entero, tendremos 4 bytes en el fichero para almacenarlo, pero por cada string tendremos un campo adicional de 4 bytes que indicará la longitud en bytes del string, para delimitarlo.
Existen diferentes maneras de guardar la misma información. Otra manera de tener la información disponible en el fichero, se muestra en la siguiente imagen. Aquí, la información se almacena dividida en autores. De esta forma, tenemos un campo inicial de 4 bytes, indicando el número total de autores almacenados, seguidamente, se tiene la información por cada autor. Para cada autor, tendremos los datos propios de cada autor, y al finalizar los datos asociados a un autor, tendremos un número almacenado en 4 bytes, indicando el número total de fotos que ha realizado dicho autor, para finalmente indicar la información asociada a cada una de esas fotos.
La elección para decidir una de entre varias maneras de almacenar la información en un fichero, depende de un análisis en el que hay que tener en cuenta las ventajas e inconvenientes, y tomar una decisión de compromiso. Así, hay que tener en cuenta qué solución ocupará más espacio en el fichero (en el caso presentado la primera opción ocupa más espacio, ya que hay que replicar la información de un mismo autor varias veces), o qué será más efectivo en cuanto a tiempo de ejecución para las operaciones que requiere la aplicación. Por ejemplo, una aplicación que requiera en multitud de ocasiones listar las fotos de un autor determinado, entonces para dicha operación resultará más efectiva la segunda opción ya que las fotos ya estarían ordenadas por autor, por lo que no tendría que buscar foto a foto, sino que una vez localizado el autor, todo estaría en posiciones contiguas en el fichero. Sin embargo, una aplicación que sólo requiera listar todas las fotos en el sistema con su información, sin importar que estén ordenadas por autor, entonces le puede resultar más efectiva la primera opción, ya que al insertar una nueva foto, la pondrá al final del fichero, sin tener que reubicar la información en el fichero para agruparla con su autor.
Responde a las siguientes preguntas