处理 CryptoStream 是否会刷新最后一个块?

Does disposing a CryptoStream flush the final block?

从 Microsoft .NET API 可以提取以下信息:

然而,这似乎在规范中留下了一个空白:处理 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...