多重使用区块,这个代码安全吗
本文关键字:代码 安全 用区 | 更新日期: 2023-09-27 18:03:52
代码片段如下
public static string ToCompressedBase64(this string text)
{
using (var memoryStream = new MemoryStream())
{
using (var gZipOutputStream = new GZipStream(memoryStream, CompressionMode.Compress))
{
using (var streamWriter = new StreamWriter(gZipOutputStream))
{
streamWriter.Write(text);
}
}
return Convert.ToBase64String(memoryStream.ToArray());
}
}
据我所知,如果类包含IDisposable字段,那么它应该实现IDisposaable本身并处理所拥有的对象,因此在这种假设下,在处理streamWriter之后,gZipOutputStream和memoryStream也将被处理。但我们仍然不需要释放memoryStream来调用它上的toArray((方法。
所以问题是,在最后对memoryStream调用ToArray((方法安全吗?
如果我正确理解您的问题,您会问在MemoryStream
上调用ToArray()
是否安全。
如果是,那么是的,它是安全的。文件规定:
当
MemoryStream
关闭时,此方法有效。
EDIT:如果不清楚closed
是否也意味着disposed
,您也可以查看Dispose
方法的源代码(注意:链接指向Stream.Dispose()
,因为MemoryStream
不会覆盖Dispose
方法(:
public void Dispose()
{
/* These are correct, but we'd have to fix PipeStream & NetworkStream very carefully.
Contract.Ensures(CanRead == false);
Contract.Ensures(CanWrite == false);
Contract.Ensures(CanSeek == false);
*/
Close();
}
正如您所看到的,调用Dispose()
只不过是调用Close()
。