Aconsejaría no usar un solo archivo plano para cantidades teóricamente infinitas de datos.
Si tiene una cantidad de datos teóricamente infinita, entonces necesita acceso aleatorio , lo que significa múltiples archivos o una base de datos, o un formato de archivo plano indexado, que implica volver a resolver los problemas de indexación ya resueltos por los sistemas de archivos o una base de datos.
Si distribuye sus fragmentos en varios archivos, obtener el fragmento en (-110, 5000) es solo una cuestión de decir "% APPDATA% / game / map / -110 / 5000.dat" (o algún otro nombre de archivo si lo desea comenzar a comprimirlos). Las bases de datos solo necesitan una consulta. Si un fragmento no tiene ningún dato, simplemente no puede almacenar nada. Un solo archivo plano no ofrece la velocidad y la conveniencia del acceso aleatorio desde el principio.
En un solo archivo de tamaño arbitrario, para un acceso aleatorio rápido debe tener una garantía para la posición de cualquier fragmento de datos, lo que significa usar un índice (ya que una búsqueda binaria sin procesar a través de sus fragmentos de datos perjudica el rendimiento y crea una cuadrícula en su archivo con puntos "en blanco" le da el problema de Byte56 ). Una vez que desarrollas un sistema de indexación, le das eficiencia y escribes una API, has recreado algo como el sistema de archivos o una base de datos. A menos que realmente ganes algo al hacerlo, probablemente no valga la pena la inversión. Por ejemplo, Steam se beneficia enormemente de sus formatos de archivo GCF / NCF.
Si desea algo de seguridad en sus guardados, aún es posible hacerlo. Por ejemplo, puede cifrar cada fragmento individual. Para evitar que se eliminen, puede tener un hash central basado en los datos guardados existentes. Si los datos guardados no coinciden con el hash (y su programa no causó el cambio), se ha eliminado un fragmento.