Как исправить «Исключение Zlib: плохое состояние (неверная проверка данных)» - PullRequest
0 голосов
/ 26 мая 2019

Я работаю с файлами, которые содержат сотни фрагментов сжатых данных.Я использую Threadpool для этого.Каждый фрагмент данных передается в очередь Threadpool.

RawData - это массив байтов, а исключение находится на 181 строке, что составляет

decompress.CopyTo(mem);

Все, что я заметил, это то, что, если я просто запускаюприложение тогда сгенерирует десятки исключений ZlibException.Если бы я его отладил и приложение иногда находилось в состоянии ожидания, то есть несколько исключений.После этого я установил метод сна на 1 секунду между распаковкой данных и получил только 4 исключения.

RawData - это массив байтов.

ZlibStream decompress = new ZlibStream(new MemoryStream(c.RawData), CompressionMode.Decompress);
MemoryStream mem = new MemoryStream();
decompress.CopyTo(mem);
Ionic.Zlib.ZlibException: Bad state (incorrect data check)
   w Ionic.Zlib.InflateManager.Inflate(FlushType flush)
   w Ionic.Zlib.ZlibCodec.Inflate(FlushType flush)
   w Ionic.Zlib.ZlibBaseStream.Read(Byte[] buffer, Int32 offset, Int32 count)
   w Ionic.Zlib.ZlibStream.Read(Byte[] buffer, Int32 offset, Int32 count)
   w System.IO.Stream.InternalCopyTo(Stream destination, Int32 bufferSize)
   w System.IO.Stream.CopyTo(Stream destination)
   w myApp.Form1.Decompress(Object state) w X:\Path\To\Projects\myApp\myApp\Form1.cs:wiersz 181

Я использую ThreadpoolПоэтому откладывать работников бессмысленно.Я не могу найти решения для этого случайного исключения, которое зависит от того, как быстро выполняется приложение.

...