Я хочу разархивировать сжатую строку, чтобы строка символов стала пригодной для использования.
Я успешно извлекаю в массив байтов содержимое загруженного файла с помощью функции WebClient.DownloadData(String).
Символы логически сжимаются с помощью метода deflate, потому что 7-Zip предоставляет эту информацию, когда я загружаю файл (с разными расширениями):
Таким образом, я должен использовать класс DeflateStream, чтобы иметь возможность декодировать строку с помощью функции Read(byte[] array, int offset, int count) ; чтение MemoryStream.
Я использую простую функцию, которую я могу найти в Интернете:
public string UnzipString2(byte[] byteArrayCompressedContent)
{
try
{
using (var memoryStream = new MemoryStream())
{
int dataLength = BitConverter.ToInt32(byteArrayCompressedContent, 0);
memoryStream.Write(byteArrayCompressedContent, 4, byteArrayCompressedContent.Length - 4);
memoryStream.Position = 0;
var buffer = new byte[dataLength];
using (var deflateStream = new DeflateStream(memoryStream, System.IO.Compression.CompressionMode.Decompress))
{
deflateStream.Read(buffer, 0, buffer.Length);
deflateStream.Close();
}
return Encoding.UTF8.GetString(buffer);
}
}
catch (Exception e)
{
return "";
}
}
Когда мы вызываем функцию Read(), она выдает исключение InvalidDataException: найдено в допустимых данных при декодировании; с трассировкой стека
в System.IO.Compression.Inflater.DecodeDynamicBlockHeader()\r\n в System.IO.Compression.Inflater.Decode()\r\n в System.IO.Compression.Inflater.Inflate(Byte[] байт, смещение Int32 , длина Int32)\r\n в System.IO.Compression.DeflateStream.Read (массив Byte [], смещение Int32, количество Int32)\r\n
Однако я все еще думаю, что информация сжимается с помощью «метода дефляции». Есть ли другой/лучший/рабочий способ чтения данных и распаковки их в строку?