处理 CryptoStream 是否会刷新最后一个块?
Does disposing a CryptoStream flush the final block?
从 Microsoft .NET API 可以提取以下信息:
using
将调用 IDisposable.Dispose()
; 的实现
IDisposable.Dispose()
应该在任何 Stream
实例上调用 Flush()
;
CryptoStream.Close()
会调用 CryptoStream.FlushFinalBlock()
.
然而,这似乎在规范中留下了一个空白:处理 CryptoStream
实例也会调用 CryptoStream.FlushFinalBlock()
,如果是这样,这在何处记录?
Dispose()
如果尚未调用,则调用 FlushFinalBlock()
。这也在文档中,但不是集中的,而是分布式的:
CryptoStreams
不会重载 Close()
或(无参数)public Dispose()
,因此 Stream
class 的实现是打电话。
Stream#Dispose()
(s. Remarks) 的文档指出:
This method disposes the stream, by writing any changes to the backing store and closing the stream to release resources.
这与源代码一致(来自.NET Framework 4.8)。 Stream#Dispose()
呼叫 Stream#Close()
.
CryptoStream#FlushFinalBlock()
(s. Remarks) 的文档说(正如您已经描述的那样):
Calling the Close method will call FlushFinalBlock.
这再次与源代码(来自 .NET Framework 4.8)一致。 Close()
calls (among other things) the protected (virtual) overload Dispose(true)
, which is overridden in CryptoStream
, see CryptoStream#Dispose(bool disposing)
,如果尚未调用,则调用 FlushFinalBlock()
(即取决于 _finalBlockTransformed
),
这些详细信息在 CryptoStream#Dispose(Boolean)
(s. Remarks):
中有描述
This method is called by the public Dispose() method and the Finalize method. Dispose() invokes the protected Dispose(Boolean) method with the disposing parameter set to true...
从 Microsoft .NET API 可以提取以下信息:
using
将调用IDisposable.Dispose()
; 的实现
IDisposable.Dispose()
应该在任何Stream
实例上调用Flush()
;CryptoStream.Close()
会调用CryptoStream.FlushFinalBlock()
.
然而,这似乎在规范中留下了一个空白:处理 CryptoStream
实例也会调用 CryptoStream.FlushFinalBlock()
,如果是这样,这在何处记录?
Dispose()
如果尚未调用,则调用 FlushFinalBlock()
。这也在文档中,但不是集中的,而是分布式的:
CryptoStreams
不会重载 Close()
或(无参数)public Dispose()
,因此 Stream
class 的实现是打电话。
Stream#Dispose()
(s. Remarks) 的文档指出:
This method disposes the stream, by writing any changes to the backing store and closing the stream to release resources.
这与源代码一致(来自.NET Framework 4.8)。 Stream#Dispose()
呼叫 Stream#Close()
.
CryptoStream#FlushFinalBlock()
(s. Remarks) 的文档说(正如您已经描述的那样):
Calling the Close method will call FlushFinalBlock.
这再次与源代码(来自 .NET Framework 4.8)一致。 Close()
calls (among other things) the protected (virtual) overload Dispose(true)
, which is overridden in CryptoStream
, see CryptoStream#Dispose(bool disposing)
,如果尚未调用,则调用 FlushFinalBlock()
(即取决于 _finalBlockTransformed
),
这些详细信息在 CryptoStream#Dispose(Boolean)
(s. Remarks):
This method is called by the public Dispose() method and the Finalize method. Dispose() invokes the protected Dispose(Boolean) method with the disposing parameter set to true...