TComponent
, очевидно, хочет иметь возможность искать в потоке, из которого он читает или пишет, и вы, как правило, не можете сделать это со сжатыми потоками - по крайней мере, не в обратном направлении. После того, как вы прочитали байт, вы не сможете вернуться и прочитать его снова, потому что то, какое именно значение вы получите, может зависеть от всего содержимого потока, которое привело к этому байту. Попытка перечитать один байт назад может означать перечитывание всего потока. И для записи, чтобы вернуться назад и «исправить» некоторую область потока, изменение одного байта будет означать необходимость повторного сжатия всего, что появилось после него. Таким образом, вы можете понять, почему сжатые потоки не любят искать в обратном направлении.
Запишите свои данные в TMemoryStream
, а затем скопируйте содержимое этого потока в сжатый поток. Чтобы прочитать, скопируйте декомпрессионный поток в TMemoryStream
и затем загрузите ваши компоненты оттуда. (Не забудьте установить свойство Position
в ноль до загрузки компонента из потока памяти.)