Я б радив не використовувати єдиний плоский файл для теоретично нескінченної кількості даних.
Якщо у вас є теоретично нескінченна кількість даних, то вам потрібен випадковий доступ , що означає декілька файлів або бази даних - або індексований формат плоских файлів, який передбачає повторне вирішення проблем індексації, вже вирішених файловими системами або базою даних.
Якщо ви поширюєте шматки по декількох файлах, отримання фрагмента (-110, 5000) - це лише питання сказати "% APPDATA% / game / map / -110 / 5000.dat" (або якесь інше ім'я файлу, якщо ви хочете починайте їх стискати). Базам даних просто потрібен запит. Якщо шматок не має жодних даних, ви можете просто нічого не зберігати. Єдиний плоский файл не пропонує швидкість та зручність випадкового доступу безпосередньо біля кажана.
Для швидкого випадкового доступу в одному файлі довільного розміру ви повинні мати гарантію на позицію будь-якого фрагмента даних, що означає використання індексу (оскільки необроблений двійковий пошук через ваші фрагменти даних погіршує продуктивність і створює сітку у вашому файл із "порожніми" плямами дає вам проблему Byte56 ). Після розробки системи індексації, надання їй ефективності та написання API, ви відтворили щось на зразок файлової системи чи бази даних. Якщо ви насправді щось не отримаєте, це, мабуть, не вартує інвестицій. Наприклад, Steam отримує значну користь від своїх форматів файлів GCF / NCF.
Якщо ви хочете отримати певну безпеку, ви все одно можете це зробити. Наприклад, ви можете зашифрувати кожен окремий фрагмент. Щоб запобігти їх видаленню, ви можете створити центральний хеш на основі наявних збережених даних. Якщо збережені дані не відповідають хешу (і ваша програма не спричинила зміни), фрагмент видалено.