Исходные сжатые данные могут быть правильно завышены обратно.Однако, если я раздуваю данные, раздуваю и снова раздуваю, получающиеся в результате данные неверны (например, простое извлечение данных, их модификация и повторное сжатие - только сейчас, когда тестирование не происходит, поэтому я могу его проверить).
Полученные данные как-то «повреждены».Начальные (около) 40 байтов в порядке, а затем следует «блок» неверных данных (остатки исходных данных все еще там, но многие байты отсутствуют).
Изменение уровня сжатия не помогает (кромеустановка NO_COMPRESSION создает каким-то образом неполный поток).
Вопрос прост: почему это происходит?
using ICSharpCode.SharpZipLib.Zip.Compression;
public byte[] Inflate(byte[] inputData)
{
Inflater inflater = new Inflater(false);
using (var inputStream = new MemoryStream(inputData))
using (var ms = new MemoryStream())
{
var inputBuffer = new byte[4096];
var outputBuffer = new byte[4096];
while (inputStream.Position < inputData.Length)
{
var read = inputStream.Read(inputBuffer, 0, inputBuffer.Length);
inflater.SetInput(inputBuffer, 0, read);
while (inflater.IsNeedingInput == false)
{
var written = inflater.Inflate(outputBuffer, 0, outputBuffer.Length);
if (written == 0)
break;
ms.Write(outputBuffer, 0, written);
}
if (inflater.IsFinished == true)
break;
}
inflater.Reset();
return ms.ToArray();
}
}
public byte[] Deflate(byte[] inputData)
{
Deflater deflater = new Deflater(Deflater.BEST_SPEED, false);
deflater.SetInput(inputData);
deflater.Finish();
using (var ms = new MemoryStream())
{
var outputBuffer = new byte[65536 * 4];
while (deflater.IsNeedingInput == false)
{
var read = deflater.Deflate(outputBuffer);
ms.Write(outputBuffer, 0, read);
if (deflater.IsFinished == true)
break;
}
deflater.Reset();
return ms.ToArray();
}
}
Редактировать: Мое плохое, по ошибке я переписал первые несколько байтов исходных сжатых данных.Это не ошибка SharpZipLib, а моя.