gpt4 book ai didi

c# - MemoryStream.WriteTo(Stream destinationStream) 与 Stream.CopyTo(Stream destinationStream)

转载 作者:太空狗 更新时间:2023-10-29 18:03:30 65 4
gpt4 key购买 nike

哪个更好:MemoryStream.WriteTo(Stream destinationStream)Stream.CopyTo(Stream destinationStream)??

我正在谈论没有 Buffer 的这两种方法的比较,因为我是这样做的:

Stream str = File.Open("SomeFile.file");
MemoryStream mstr = new MemoryStream(File.ReadAllBytes("SomeFile.file"));

using(var Ms = File.Create("NewFile.file", 8 * 1024))
{
str.CopyTo(Ms) or mstr.WriteTo(Ms);// Which one will be better??
}

更新

这是我想做的:

  • 打开文件 [说“X”类型文件]
  • 解析内容
  • 从这里我得到了一堆新的流 [3 ~ 4 个文件]
  • 解析一个流
  • 提取数千个文件 [流是一个图像文件]
  • 将其他流保存到文件
  • 编辑所有文件
  • 生成一个新的“X”类型文件。

我已经编写了实际工作正常的每一段代码..

但现在我正在优化代码以使其最高效。

最佳答案

有两种方法可以做同一件事,这是一个历史偶然。 MemoryStream 一直有 WriteTo() 方法,Stream 直到 .NET 4 才获得 CopyTo() 方法。

MemoryStream.WriteTo() 版本如下所示:

public virtual void WriteTo(Stream stream)
{
// Exception throwing code elided...
stream.Write(this._buffer, this._origin, this._length - this._origin);
}

像这样的 Stream.CopyTo() 实现:

private void InternalCopyTo(Stream destination, int bufferSize)
{
int num;
byte[] buffer = new byte[bufferSize];
while ((num = this.Read(buffer, 0, buffer.Length)) != 0)
{
destination.Write(buffer, 0, num);
}
}

Stream.CopyTo() 更通用,它适用于任何流。并帮助那些笨手笨脚地从网络流中复制数据的程序员。忘记注意 Read() 的返回值是一个非常的常见错误。但它当然会复制字节两次并分配临时 buffer,MemoryStream 不需要它,因为它可以直接从自己的缓冲区写入。所以您仍然更喜欢 WriteTo()。不太可能注意到差异。

关于c# - MemoryStream.WriteTo(Stream destinationStream) 与 Stream.CopyTo(Stream destinationStream),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10664458/

65 4 0