Функция HPDFTransferStream
Переносит байты от текущей позиции источника к текущей позиции приёмника и обходится без промежуточного копирования для поддерживаемых типов хранилищ
Объявление
function HPDFTransferStream(
Source, Destination: TStream;
Count: Int64 = -1): Int64;
Модуль
HPDFObjs
Пути передачи
TMemoryStreamпишет напрямую из своего указателя на данные, не выделяя буфер передачиTFileStreamпишет напрямую из ограниченных read-only отображений и автоматически откатывается к резервному пути, если отображение недоступноTHPDFMappedFileStreamиTHPDFLazyFileStreamс подложкой-источником пишут напрямую из резидентных отображённых окон- Random-access stream делегирует работу
THPDFRandomAccessSource.TransferAt, аTHPDFCoalescingRandomAccessSourceпишет удерживаемые блоки cache напрямую - Остальные классы stream используют ограниченный резервный буфер 64 КиБ
Count и позиции
При Count = -1 переносятся все байты от текущей позиции источника, ноль не переносит ничего, положительное значение обрезается по доступным байтам; значения меньше -1 отклоняются
Обе позиции stream сдвигаются на число возвращённых байтов; источник и приёмник должны быть разными объектами, не равными nil
Интеграция с PDF writer
Тела нешифрованных PDF stream, декодированный вывод без фильтров, экспорт загруженных изображений в raw-виде, материализация lazy stream и адаптивный сброс во временный stream задействуют этот слой передачи автоматически
Тела шифрованных stream по-прежнему требуют промежуточной подготовки, потому что их байты и длина меняются до сериализации