将一个流的内容复制到另一个流的最佳方法是什么?有标准的实用方法吗?
当前回答
区分“CopyStream”实现的基本问题是:
读取缓冲区的大小 写入的大小 我们是否可以使用多个线程(在读取时写入)。
这些问题的答案导致了CopyStream的巨大不同的实现,这取决于您拥有的流的类型和您试图优化的内容。“最佳”实现甚至需要知道流正在读取和写入的具体硬件。
其他回答
实际上,有一种更简单的方法来做流复制。但是请注意,这意味着您可以将整个文件存储在内存中。如果您正在处理数百兆字节或更大的文件,请不要轻率地尝试使用此功能。
public static void CopySmallTextStream(Stream input, Stream output)
{
using (StreamReader reader = new StreamReader(input))
using (StreamWriter writer = new StreamWriter(output))
{
writer.Write(reader.ReadToEnd());
}
}
注意:关于二进制数据和字符编码也可能存在一些问题。
MemoryStream有.WriteTo(outstream);
. net 4.0在普通流对象上有. copyto。
net 4.0:
instream.CopyTo(outstream);
对于。net 3.5和尝试之前:
MemoryStream1.WriteTo(MemoryStream2);
. net Framework 4引入了新的系统流类的CopyTo方法。IO命名空间。使用此方法,我们可以将一个流复制到不同流类的另一个流。
这里有一个例子。
FileStream objFileStream = File.Open(Server.MapPath("TextFile.txt"), FileMode.Open);
Response.Write(string.Format("FileStream Content length: {0}", objFileStream.Length.ToString()));
MemoryStream objMemoryStream = new MemoryStream();
// Copy File Stream to Memory Stream using CopyTo method
objFileStream.CopyTo(objMemoryStream);
Response.Write("<br/><br/>");
Response.Write(string.Format("MemoryStream Content length: {0}", objMemoryStream.Length.ToString()));
Response.Write("<br/><br/>");
区分“CopyStream”实现的基本问题是:
读取缓冲区的大小 写入的大小 我们是否可以使用多个线程(在读取时写入)。
这些问题的答案导致了CopyStream的巨大不同的实现,这取决于您拥有的流的类型和您试图优化的内容。“最佳”实现甚至需要知道流正在读取和写入的具体硬件。