Меня смущает поведение алгоритма Deflate, например, первый блок байтов (размер 12 ~ 13k) всегда успешно распаковывается.Но вторая декомпрессия никогда не бывает успешной ..
Я использую DotNetZip (DeflateStream) с простым кодом, позже я переключился на ZLIB.Net (компонент аса), Org.Bouncycastle и различные библиотеки c #.
Сжатие происходит на c ++ (сервер, который отправляет пакеты) с deflateInit2, windowSize (-15) -> (15 - nowrap).
Что может бытьнеправильно происходит, чтобы у меня были нули в конце буфера, несмотря на то, что распаковка прошла успешно?
пример кода с "Org.BouncyCastle.Utilities.Zlib"
этоПримерно такой же код почти для любой библиотеки (DotNetZip, ZLIB.Net, ...)
internal static bool Inflate(byte[] compressed, out byte[] decompressed)
{
using (var inputStream = new MemoryStream(compressed))
using (var zInputStream = new ZInputStream(inputStream, true))
using (var outputStream = new MemoryStream())
{
zInputStream.CopyTo(outputStream);
decompressed = outputStream.ToArray();
}
return true;
}