.NET Deflate Stream Ошибка / Ошибка - PullRequest
1 голос
/ 03 августа 2010

Кто-нибудь испытывал следующую ошибку при использовании .NET Deflate Stream?

System.IndexOutOfRangeException: Index was outside the bounds of the array.
 at System.IO.Compression.HuffmanTree.CreateTable()
 at System.IO.Compression.Inflater.DecodeDynamicBlockHeader()
 at System.IO.Compression.Inflater.Decode()
 at System.IO.Compression.Inflater.Inflate(Byte[] bytes, Int32 offset, Int32 length)
 at System.IO.Compression.DeflateStream.Read(Byte[] array, Int32 offset, Int32 count)

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

Похоже, что исключение метода HuffmanTree.CreateTable и процедура пытаются заполнить массив за его пределами.

Я попытался выделить для декомпрессии массив, который в два раза больше исходного, и он все равно выдает ошибку.

Кажется, что декодированные данные не повреждены, однако процедура продолжает пытаться декодировать и переполняет буфер.

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

Любое понимание проблемы будет оценено.

(Я пробовал DotNetZip, который вызывает различные проблемы в 64-битной среде, в которой я работаю.)

...