2

当我将一些流写入一个新的内存流时,内存流的长度和容量一开始都设置为0,并随着写入过程而增长。但在某些时候,容量的增长速度超过了长度。
写入操作完成后,我得到了正确的长度(与原始输入流的长度相同),但容量更大。
这是对的吗?
他们不应该是一样的吗?
我找不到任何关于它的信息

4

1 回答 1

11

他们不应该是一样的吗?

不——或者至少,不一定。这与 aList<T>的容量与其计数(或StringBuilder就此而言)基本相同。这个想法是,为了最大限度地减少复制的次数,当您需要增加容量时,您会显着增加它 - 而不仅仅是一次一个字节。例如,一种策略是“最少 16 个字节,并在需要时将容量翻倍”。

在你完成了一些写操作之后,流如何知道你已经完成了?您是否真的希望它必须复制整个内容才能再写入一个字节?

基本上,权衡是内存与速度:容量越大,副本之间的写入速度就越快。

于 2014-02-03T13:56:05.513 回答