[英]Stream.CopyTo(Stream.Null)
我想驗證我的ZipArchive。 為此,我將所有條目復制到MemoryStream。 我只想了解我是否可以打開並復制我的條目。
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);
}
}
}
}
復制到空流將起作用,並且如您所見,將不需要額外的內存來保存流中的數據。
您可以檢查基礎流的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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.