Сожмите TComponents при записи им в TStream

Это решение работает для меня: -

  jQuery.ajax({
    type: "POST",
    url: ajax_url,
    data: ajax_data,
    dataType: 'json',
    cache: false,
    success: function(response) {
      if (response.length > 0) {
        var $container = $('#container');
        var msnry = $container.data('masonry');
        var elems = [];
        var fragment = document.createDocumentFragment();
        for (var x in response) {
          var elem = $(response[x]).get(0);
          fragment.appendChild(elem);
          elems.push(elem);
        }
        $container.appendChild(fragment);
        msnry.appended(elems);
      }
    }
  });
5
задан Lepidosteus 21 May 2009 в 21:38
поделиться

1 ответ

TComponent очевидно хочет иметь возможность искать в потоке, из которого он читает или записывает, и обычно вы не можете сделать это со сжатыми потоками - по крайней мере, не в обратном направлении. После того, как вы прочитали байт, вы не можете вернуться и прочитать его снова, потому что то, какое именно значение вы получите, может зависеть от всего содержимого потока, которое в первую очередь привело к этому байту. Обратный поиск для повторного чтения одного байта может означать повторное чтение всего потока. А для записи, чтобы вернуться и «исправить» какую-то область потока, изменение одного байта означало бы необходимость повторного сжатия всего, что идет после него. Итак, вы можете понять, почему сжатые потоки не любят обратный поиск.

Запишите свои данные в TMemoryStream , а затем скопируйте содержимое этого потока в сжатый поток. Читать, скопируйте поток распаковки в TMemoryStream , а затем загрузите оттуда свои компоненты. (Не забудьте вернуть свойство Position в ноль перед загрузкой компонента из потока памяти.)

14
ответ дан 18 December 2019 в 13:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: