Я использую слегка модифицированную версию DotZlib, которая является частью каталога contrib с исходным кодом zlib, чтобы раздуть поток данных в реальном времени.DotZlib - код обработки ошибки Inflate 1 Z_STREAM_END
Вместо обычного inflateInit мне нужно использовать InflateInit2 - но это единственное отличие от предоставленной библиотеки.
Пустота после нескольких чтений Я получаю код ошибки 1 из zlib и не могу восстановить при добавлении байтов.
Исходный код из каталога CONTRIB ZLIB является:
public override void Add(byte[] data, int offset, int count)
{
if (data == null) throw new ArgumentNullException();
if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException()
;
if ((offset+count) > data.Length) throw new ArgumentException();
int total = count;
int inputIndex = offset;
int err = 0;
while (err >= 0 && inputIndex < total)
{
copyInput(data, inputIndex, Math.Min(total - inputIndex, kBufferSize));
err = inflate(ref _ztream, (int)FlushTypes.None);
if (err == 0)
while (_ztream.avail_out == 0)
{
OnDataAvailable();
err = inflate(ref _ztream, (int)FlushTypes.None);
}
inputIndex += (int)_ztream.total_in;
}
setChecksum(_ztream.adler);
}
КСТАТИ Кто-нибудь знает, как внести свой вклад улучшенный код? Реализация хорошо разработана, но неполна с моей точки зрения.
FYI, есть 100% управляемый ZlibStream в DotNetZip - http://dotnetzip.codeplex.com. – Cheeso
Да - но мне нужно добавить поддержку сжатия в приложение реального времени - таким образом, мне нужно иметь максимальную производительность. – weismat