У нас есть простой двоичный формат файла для кэширования данных в нашем приложении (C # .NET Windows App). Формат в основном короткий, который указывает тип объекта, за которым следует идентификатор (строка) для идентификатора объекта, а затем любые специфические для объекта данные (строковые целые числа независимо от). Мы хотим иметь возможность хранить много объектов в одном и том же файле (> 10000), но в определенных ситуациях загружать только по требованию. Решение, которое у нас есть, состоит в том, чтобы сохранить индекс расположения объектов в файле - поэтому, когда мы начинаем писать новый объект, мы записываем позицию в файловом потоке, который запускает объект. Когда мы хотим загрузить этот объект, мы используем это индексированное местоположение для загрузки соответствующих данных. Это отлично работает.
Однако, если мы хотим сжать файл, будет ли этот метод все еще возможен? Я не слишком разбираюсь в том, как работает сжатие и, в частности, в классе GZipStream (System.IO.Compression), который мы планируем использовать. Насколько я понимаю, этот класс не поддерживает Seeking или свойство Position. Будет ли все еще возможно использовать поиск и положение базового FileStream (я предполагаю, что нет)? В принципе, возможно ли иметь сжатый файл, из которого мы можем выборочно загружать файлы? Если да, то как нам это сделать?
Спасибо
Steve