2016-11-16 2 views
0

Я хочу проверить свой ZipArchive. Для этого я копирую все записи в MemoryStream. Я только хочу узнать, могу ли я открывать и копировать свои записи.Stream.CopyTo (Stream.Null)

public void ZipVerification(Stream stream) 
    { 
     using (var memoryStream = new MemoryStream()) 
     using (var zip = new ZipArchive(stream, ZipArchiveMode.Read)) 
     { 
      foreach (var entry in zip.Entries) 
      { 
       using (var entryStream = entry.Open()) 
       { 
        entryStream.CopyTo(memoryStream); 
       } 
      } 
     } 
    } 

Но этот метод использует мою память. Лучше ли использовать Stream.Null вместо MemoryStream?

public void ZipVerification(Stream stream) 
    { 
     using (var zip = new ZipArchive(stream, ZipArchiveMode.Read)) 
     { 
      foreach (var entry in zip.Entries) 
      { 
       using (var entryStream = entry.Open()) 
       { 
        entryStream.CopyTo(Stream.Null); 
       } 
      } 
     } 
    } 
+0

Я не уверен. MSDN только рассказывает о вызове чтения или записи в потоке. Нуль, ничего о том, что происходит во время копирования в Null. https://msdn.microsoft.com/en-us/library/system.io.stream.null(v=vs.110).aspx –

ответ

2

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

Вы можете проверить Position базового потока, чтобы увидеть, что это на самом деле потребляют поток:

public static void ZipVerification() 
{ 
    using (var zip = new ZipArchive(stream, ZipArchiveMode.Read)) 
    { 
     // Print stream position before. 
     Console.WriteLine(stream.Position); 

     foreach (var entry in zip.Entries) 
     { 
      using (var entryStream = entry.Open()) 
      { 
       entryStream.CopyTo(System.IO.Stream.Null); 
      } 
     } 

     // Print stream position after. 
     Console.WriteLine(stream.Position); 
    } 
} 
Смежные вопросы