0
原始的壓縮數據可以被正確地填充回來。然而,如果我膨脹數據,放氣,並再次膨脹,結果數據是不正確的(例如,簡單的數據提取,其修改和再次壓縮 - 只有當現在測試沒有修改發生時,所以我可以測試它)。SharpZipLib Deflater創建錯誤的數據
生成的數據以某種方式「損壞」。起始(大約)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故障,但是我的。