<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://sfsys.ru/index.php?action=history&amp;feed=atom&amp;title=StreamCompress</id>
	<title>StreamCompress - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://sfsys.ru/index.php?action=history&amp;feed=atom&amp;title=StreamCompress"/>
	<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=StreamCompress&amp;action=history"/>
	<updated>2026-04-04T16:37:20Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.1</generator>
	<entry>
		<id>http://sfsys.ru/index.php?title=StreamCompress&amp;diff=4483&amp;oldid=prev</id>
		<title>Admin: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=StreamCompress&amp;diff=4483&amp;oldid=prev"/>
		<updated>2022-11-18T09:38:37Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 09:38, 18 November 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=StreamCompress&amp;diff=4482&amp;oldid=prev</id>
		<title>1&gt;Admin: /* Примеры */</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=StreamCompress&amp;diff=4482&amp;oldid=prev"/>
		<updated>2022-10-25T12:24:52Z</updated>

		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Примеры&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=StreamCompress&lt;br /&gt;
|object=[[Функции общего назначения]]&lt;br /&gt;
|caption=Функции архивации&lt;br /&gt;
|type=1&lt;br /&gt;
|status=1&lt;br /&gt;
|db=0&lt;br /&gt;
|exception=Невозможно превратить в строку, число, неверный аргумент, внешняя ошибка&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Функции общего назначения]]}}&lt;br /&gt;
Функция производит упаковку блока данных по заданному алгоритму. Для последовательной упаковки частей одного большого блока данных, функцию необходимо вызвать несколько раз с каждой частью блока данных. При работе с упаковкой и особенно с распаковкой данных, при некорректных аргументах функции можно получить порчу памяти, поэтому, нужно быть внимательным при написании программ и всегда их проверять.&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
'''StreamCompress'''(''&amp;lt;Данные для упаковки (STRING,BUFFER,TEXT)&amp;gt;''{{Optional|,&amp;lt;Алгоритм (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;ZLIB&amp;quot;}},&amp;lt;Уровень (INT)&amp;gt;{{Default|{{Eq}}6}},&amp;lt;Завершающий блок (INT)&amp;gt;{{Default|{{Eq}}1}}{{ByRef|,&amp;lt;Словарь упаковки&amp;gt;}}}}):''&amp;lt;Результат упаковки (STRING,BUFFER)&amp;gt;''&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Данные для упаковки (STRING,BUFFER,TEXT)&amp;gt;''&amp;lt;/code&amp;gt; - Функция поддерживает получение информации из строк, буферов или текста. '''Важно''': если строка или текст закодированы в юникоде, функция не выполняет перекодирования данных в ANSI, будет происходить упаковка UTF-16 данных.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Алгоритм (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Строка, задающая используемый алгоритм. Поддерживаются следующие алгоритмы:&lt;br /&gt;
** '''ZLIB''' (по умолчанию): Упаковка будет происходить методом Deflate с добавление заголовка Zlib. Обычно файлы, упакованные подобным образом, не поддерживаются архиваторами из-за простого нестандартного заголовка. Преимущества этого метода в том, что при распаковке не требуется указывать полный размер упакованного файла до начала распаковки.&lt;br /&gt;
** '''GZIP''' или '''GZ''': Упаковка будет происходить методом Deflate с добавление заголовка Gzip. Полученный массив данных можно будет распаковать стандартными средствами архивации. Минусом этого метода по сравнению с Zlib является то, что при распаковке требуется указывать полный размер упакованного файла до начала распаковки.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Уровень (INT)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Указывает уровень сжатия при упаковке. Аргумент может принимать значения от ''0'' до ''9''. При этом ''0'' -- не сжимать вообще, ''9'' -- максимальное сжатие. Уровень ''6'' используется по умолчанию. Для методов Deflate, уровни выше ''6'' будут занимать большее время при упаковке при этом не давать весомой выгоды по размеру результата.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Завершающий блок (INT)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Указывает на то, что это последний блок в серии блоков для упаковки. При упаковке большого блока частями важно, чтобы вызов с аргументом равным ''1'' был последним и единственным и больше вызовов с тем же самым словарем не производилось. &lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Словарь упаковки&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} {{ByRef}} При упаковке большого блока частями необходимо передать в этот аргумент переменную, которая в начале упаковки будет равна нулю или пустому значению. Эта переменная будет хранить промежуточное состояние упаковки (чаще всего буфер). После выполнения последней операции упаковки (''Завершающий блок'' равен ''1''), внутренние ресурсы, требуемые на упаковку, освобождаются, и переменная будет хранить неопределенное значение (чаще всего буфер с бесполезной информацией) до того, как она будет удалена из системы.&lt;br /&gt;
&lt;br /&gt;
==== Возвращаемое значение ====&lt;br /&gt;
В зависимости от аргумента &amp;lt;Данные для упаковки&amp;gt;, функция возвращает:&lt;br /&gt;
* &amp;lt;Данные для упаковки&amp;gt; являются строкой или текстом: результат упаковки переменного блока данных в виде строки ANSI.&lt;br /&gt;
* &amp;lt;Данные для упаковки&amp;gt; являются буфером: результат упаковки переменного блока данных в виде буфера.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Загрузим файл в строку&lt;br /&gt;
сФайл:=FileToString(&amp;quot;C:\ТестовыйФайл.txt&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//Упакуем строку сФайл с помощью алгоритма GZip частями по 1024 байта&lt;br /&gt;
РазмерБлока:=1024;&lt;br /&gt;
Словарь:=0;&lt;br /&gt;
сРезультат:=&amp;quot;&amp;quot;;&lt;br /&gt;
j:=0;&lt;br /&gt;
For i:=1 To Length(сФайл) div РазмерБлока Do&lt;br /&gt;
  j:=j+РазмерБлока;&lt;br /&gt;
  сРезультат:=сРезультат+StreamCompress(Mid(сФайл,(i-1)*РазмерБлока+1,РазмерБлока),&amp;quot;GZ&amp;quot;,6,0,Словарь);&lt;br /&gt;
EndDo;&lt;br /&gt;
//Упакуем последний блок меньше 1024 байт (возможен пустой блок)&lt;br /&gt;
сРезультат:=сРезультат+StreamCompress(Right(сФайл,Length(сФайл)-j),&amp;quot;GZ&amp;quot;,6,1,Словарь);&lt;br /&gt;
&lt;br /&gt;
//Сохраним упакованный блок в виде файла&lt;br /&gt;
StringToFile(сРезультат,&amp;quot;C:\ТестовыйФайл.gz&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//Распакуем блок сРезультат с помощью алгоритма GZip частями по 1024 байта&lt;br /&gt;
//Для GZip необходимо также указать общий размер упакованного блока в переменной Словарь при первом вызове&lt;br /&gt;
РазмерБлока:=1024;&lt;br /&gt;
Словарь:=Length(сРезультат);&lt;br /&gt;
сФайл2:=&amp;quot;&amp;quot;;&lt;br /&gt;
j:=0;&lt;br /&gt;
For i:=1 To Length(сРезультат) div РазмерБлока Do&lt;br /&gt;
  j:=j+РазмерБлока;&lt;br /&gt;
  сФайл2:=сФайл2+StreamDecompress(Mid(сРезультат,(i-1)*РазмерБлока+1,РазмерБлока),&amp;quot;GZ&amp;quot;,0,Словарь);&lt;br /&gt;
EndDo;&lt;br /&gt;
//Распакуем последний блок меньше 1024 байт (возможен пустой блок)&lt;br /&gt;
сФайл2:=сФайл2+StreamDecompress(Right(сРезультат,Length(сРезультат)-j),&amp;quot;GZ&amp;quot;,1,Словарь);&lt;br /&gt;
&lt;br /&gt;
//Сравним сФайл и сФайл2&lt;br /&gt;
If сФайл&amp;lt;&amp;gt;сФайл2 Then&lt;br /&gt;
  Message(&amp;quot;Результаты не совпадают!&amp;quot;,&amp;quot;!&amp;quot;);&lt;br /&gt;
Else&lt;br /&gt;
  Message(&amp;quot;Результаты совпадают!&amp;quot;,&amp;quot;I&amp;quot;);&lt;br /&gt;
EndIf;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>1&gt;Admin</name></author>
		
	</entry>
</feed>