Это - сервер DNS, и это присвоило бы IP-адреса машинам, которые запрашивают их от Вашего компьютера. В этом случае это использовалось бы NetworkManager для совместного использования интернет-соединения. Ничто для волнения о :)
Он сообщает вам, что вы должны вызвать Read
вместо Write
, поскольку это декомпрессия! Также поток памяти должен быть сконструирован с данными, или, скорее, вы должны передать файловый поток непосредственно в конструктор GZipStream.
Пример того, как это должно было быть сделано (не пытался скомпилировать его):
Stream inFile = new FileStream(@"C:\TarDecomp\TarDecomp\TarDecomp\bin\Debug\nick_blah-2008.tar.gz", FileMode.Open, FileAccess.Read, FileShare.Read);
Stream decodedStream = new MemoryStream();
byte[] buffer = new byte[4096];
using (Stream inGzipStream = new GZipStream(inFile, CompressionMode.Decompress))
{
int bytesRead;
while ((bytesRead = inGzipStream.Read(buffer, 0, buffer.Length)) > 0)
decodedStream.Write(buffer, 0, bytesRead);
}
// Now decodedStream contains the decoded data
Код сжатия не работает как шифрование - вы не можете распаковать из одного потока в другой, записав сжатые данные. Вы должны предоставить поток, который уже содержит сжатые данные, и позволить GZipStream
читать из него. Примерно так:
using (Stream file = File.OpenRead(filename))
using (Stream gzip = new GZipStream(file, CompressionMode.Decompress))
using (Stream memoryStream = new MemoryStream())
{
CopyStream(gzip, memoryStream);
return memoryStream.ToArray();
}
CopyStream
- это простой служебный метод для чтения из одного потока и копирования всех данных в другой. Примерно так:
static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, bytesRead);
}
}
Поначалу может быть непонятно, как работают потоки сжатия.
Чтение требует сжатых данных, а запись - несжатых данных. В общем, поток гарантирует, что вы всегда будете "видеть" несжатые данные.
Правильный способ добиться того, что вы пытаетесь сделать, - это прочитать с помощью GZipStream
, а затем записать с помощью GZipStream
также.