当我将一些流写入新的内存流时,内存流的长度和容量最初都设置为0,并随着写入过程一起增长。但在某些时候,容量增长的速度要快于长度
写操作完成后,我得到正确的长度(与原始输入流的长度相同),但容量更大。
这是正确的吗?
它们不应该是一样的吗?
我找不到任何关于它的信息
答案 0 :(得分:10)
它们应该不一样吗?
不 - 或者至少,不一定。这基本上与List<T>
的容量与其计数(或StringBuilder
相关)相同。我们的想法是,为了最大限度地减少复制的次数,当您需要增加容量时,可以显着增加容量 - 而不是一次只增加一个字节。因此,例如,一个策略是“最少16个字节,并在需要时将容量加倍。”
完成一些写操作后,流如何知道你已经完成了?你真的希望它必须复制整个内容才能再写一个字节吗?
基本上,权衡是内存与速度的关系:你的容量越大,你在副本之间的快速写作就越多。