C# SharpZipLib Не удается прочитать поток при попытке распаковать zip в Unity3D

Я использую ICSharpCode.SharpZipLib, чтобы попытаться разархивировать файл из Интернета, все, что мне нужно сделать, это получить несжатый массив байтов. Однако я получаю ошибку "InvalidOperationException: невозможно прочитать из этого потока". Я работаю в C# в Unity3D с целью в качестве веб-игрока. Это, очевидно, читабельно, поэтому я не уверен в проблеме. Вот мой код, и любая помощь будет принята с благодарностью.

using (MemoryStream s = new MemoryStream(bytes))
{
    using (BinaryReader br = new BinaryReader(s))
    {               

        using (ICSharpCode.SharpZipLib.Zip.ZipInputStream zip = new ICSharpCode.SharpZipLib.Zip.ZipInputStream(s))
        {
            byte[] bytesUncompressed = new byte[32768];
            while (true)
            {
                Debug.Log("can read: " + zip.CanRead);
                int read = zip.Read(bytesUncompressed, 0, bytesUncompressed.Length);
                if (read <= 0)
                    break;
                zip.Write(bytesUncompressed, 0, read);
            }
        }
    }
}

2 ответа

Пример шаблона довольно болезненный, позвольте мне дать вам "лучший (tm)" шаблон для использования.

byte[] GetBytesFromCompressedStream(MemoryStream src)
{
    byte[] uncompressedBytes = null;

    using (MemoryStream dst = new MemoryStream())
    using (ICSharpCode.SharpZipLib.Zip.ZipInputStream zip = new ICSharpCode.SharpZipLib.Zip.ZipInputStream(src))
    {
        byte[] buffer = new byte[16 * 1024];
        int read = -1;

        while((read = zip.Read(buffer, 0, buffer.Length)) > 0)
        {
            dst.Write(buffer, 0, read);
        }

        uncompressedBytes = dst.ToArray();
    }

    return uncompressedBytes;
}

Мне неясно, как вы заполняете свой поток s, но все, что вам может понадобиться, это откатить позицию вашего потока перед прочтением:

s.Seek(0, System.IO.SeekOrigin.Begin);
Другие вопросы по тегам