我有一种情况,我正在使用多个流通过http下载压缩文件。为此,我需要使用多个流。即获取Web响应流,读入二进制读取器流,使用二进制写入器流写入内存流等。使用声明范围如何在使用从其他Stream创建的Stream时工作?
因为它有点复杂和讨厌,我已经把所有东西都分成了小函数,使它读取了一点更好,但我有一点与readStreamIntoMemoryStream
功能,我从公众DownloadCsvReport
函数调用provlem的,见下图:
public IEnumerable<string> DownloadCsvReport(string reportDownloadUrl)
{
using (Stream responseStream = creatDownloadWebRequest(reportDownloadUrl))
using (MemoryStream memoryStream = readStreamIntoMemoryStream(responseStream))
{
setMemoryStreamToBegining(memoryStream);
ZipEntry zipEntry = getZippedFileFromMemoryStream(memoryStream);
return convertZippedFileToCsvRows(zipEntry);
}
}
private MemoryStream readStreamIntoMemoryStream(Stream webResponseStream)
{
var memoryStream = new MemoryStream();
var binaryWriter = new BinaryWriter(memoryStream);
var binaryReader = new BinaryReader(webResponseStream);
while (true)
{
byte[] buffer = binaryReader.ReadBytes(BufferSize);
binaryWriter.Write(buffer);
if (buffer.Length != BufferSize)
{
return memoryStream;
}
}
}
我不确定是事情无论从私人的BinaryWriter
和BinaryReader
流函数将在MemoryStream
是公共方法失去范围时处理掉?如果不是,我用私有方法将这些流封装在使用语句中,当我尝试访问公共方法中的MemoryStream
时它是否会抛出异常?
很酷的东西,应该考虑检查一下自己。干杯。 – jcvandan