是否总是需要关闭流,或者因为.net是托管代码,一旦它退出范围就会自动关闭(假设没有引发异常).
图说:
static string SerialiseObjectToBase64(object obj)
{
var mstream = new MemoryStream();
...
return Convert.ToBase64String(mstream.ToArray());
}
Run Code Online (Sandbox Code Playgroud)
以上代码是否可以接受?
Mar*_*ell 12
随着MemoryStream这是一个有点一个有争议的问题的-因为你最终跟一个有管理的byte[](所以还是要等待常规垃圾收集).但总的来说,是的:你应该关闭(更好:Dispose()通过using,因此它会在异常时关闭)流完成后,否则你可能不会将一些数据刷新到底层(非托管)目的地.并且有些流实际上并不完全"刷新" Flush()- 它们需要是Close()d(特别是压缩流).
关闭你的溪流是一种很好的做法.使用该using语句,Dispose()当它超出范围时(或者抛出异常)将被调用,这将关闭您的流.
static string SerialiseObjectToBase64(object obj)
{
using (var mstream = new MemoryStream())
{
...
return Convert.ToBase64String(mstream.ToArray());
}
}
Run Code Online (Sandbox Code Playgroud)