根據.Net 4.5中的MSDN,System.IO.Compression基於zlib。
我現在正在嘗試將當前基於互操作的讀取從zlib壓縮流從非.NET服務器轉換爲基於BCL的實現。
我的實現看起來是這樣的:.Net zlib使用.Net 4.5充氣
var enc = new UTF8Encoding();
var readBytes = BufferSizeRaw;
var outputBuffer = new byte[BufferSizeRaw];
var networkBuffer = _networkQueue.Take();
var ms = new MemoryStream(networkBuffer.InputBuffer, 0, networkBuffer.UsedLength);
using (Stream stream = new DeflateStream(ms, CompressionMode.Decompress))
while (readBytes==BufferSizeRaw)
{
readBytes = stream.Read(outputBuffer, 0, outputBuffer.Length);
stringBuffer+= enc.GetString(outputBuffer, 0, readBytes);
}
我收到關於減壓/第一次呼叫的DeflateStream閱讀以下異常:
塊長度不符合它的補
基於互操作的呼叫使用var result=inflate(ref zStyream, ZLibFlush.NoFlush;
有沒有人試過相同的o r在代碼中看到錯誤的原因,或者在我的結尾有錯誤的理解? 我也嘗試過截斷前兩個字節沒有任何運氣。
前幾個字節是20,202,177,13。
有我的計劃,我現在已經解決的另一個錯誤,現在運轉。我的理解是,從版本4.5開始就使用二進制zlib版本 - 這是我爲什麼執行切換的背景。出於性能考慮,我之前使用的是本地版本。 – weismat
需要糾正自己 - 它僅適用於幾次讀取 - 很可能與內存流有關。將進一步調查。 – weismat
雖然他們終於切換到4.5中使用zlib,這固定了一堆真正的腦死亡問題,但zlib的接口卻搞砸了,他們不會修復它。所以我建議回到本地或使用DotNetZip。 –