Я пытаюсь использовать поток сжатия INFLATE в .NET с помощью DeflateStream
. Мой код бросает InvalidDataException
, хотя я знаю, что данные, которые я передаю, были правильно обработаны алгоритмом DEFLATE (он был протестирован). Я неправильно использую DeflateStream
? Мой код выглядит следующим образом:Использование .NET DeflateStream
public byte[] Inflate(byte[] deflateArr)
{
MemoryStream ms;
// try to create a MemoryStream from a byte array
try
{
ms = new MemoryStream(deflateArr);
}
catch (ArgumentNullException)
{
return null;
}
// create a deflatestream and pass it the memory stream
DeflateStream ds;
try
{
ds = new DeflateStream(ms, CompressionMode.Decompress);
}
catch (ArgumentNullException)
{
return null;
}
catch (ArgumentException)
{
return null;
}
// create a bytes array and read into it
byte[] bytes = new byte[4096];
try
{
ds.Read(bytes, 0, 4096);
}
catch (ArgumentNullException)
{
return null;
}
catch (InvalidOperationException)
{
return null;
}
catch (ArgumentOutOfRangeException)
{
return null;
}
catch (InvalidDataException)
{
return null;
}
// close the memory stream
ms.Close();
// close the deflate stream
ds.Close();
return bytes;
}
Извините, если это глупый вопрос, но какова недостатка исключений? – cytinus
@cytinus: Он скрывает ошибку. Если ваш метод возвращает null, вы не знаете, почему * и ваша программа будет продолжать работать, тогда как если исключение пузырится, вы можете сказать, что у вас есть ошибка, и вы не пытаетесь продолжать работу с плохими данными , Что-то вроде 'ArgumentNullException' всегда должно быть связано с ошибкой где-то - так что вы хотите найти эту ошибку ASAP. –
О, мой фактический код содержит кучу протоколирования, и если этот метод возвращает null, вызывающий метод убивает программу сообщением об ошибке. Все регистрируется в журнале событий Windows, я просто удалил этот код из вопроса, потому что это не касалось моего вопроса. – cytinus